keras - 如何创建一个动态依赖于输入维度(而不是批量大小)的 keras 模型?
问题描述
如果您使用 keras 子类 api,并且您想根据输入维度 x = (batch_dim, n) 生成一堆层 (n),有没有办法在 build 方法中执行此操作?
或者是在初始化时将输入昏暗传递到模型中以便可以在初始化范围内创建层的唯一方法?
更新:伪代码(未经测试)示例
class BigModel(tf.keras.models.Model):
def __init__(self):
super.__init__()
self._my_submodels = list()
def build(self, input_shape):
for i in range(input_shape[1]):
self.my_submodels.append(MyModel(param=i))
def call(self, *inputs):
stuff = list()
for submodel in self.my_submodels:
stuff.append(submodel(*inputs))
# do something amazing with all the models
fan_in = ... # combine
return fan_in
您可能可以使用具有大量拆分的模型以更矢量化的方式重写整个结构,但它会更难阅读和处理,我认为新的 tf 2.0 允许这种动态性而不会造成任何成本损失。
解决方案
是的,而不是使用batch_shape = (batch_size, input_dim)
,使用batch_shape=(None, input_dim)
它允许任意数量的batch_size。
推荐阅读
- c - Makefile 不会创建最终的可执行文件
- android - Gradle Sync:下载 https;//jcenter.bintray.com/... 无限期运行
- javascript - 光滑的滑块同步 - 断点上的自定义箭头
- python - 访问列表字典中的值时出现问题
- javascript - 使用 BeautifulSoup 捕获 JavaScript 警报文本
- c# - 从屏幕上的动态列表中读取并在执行 catch 时跳过某些选项?
- websphere - WebSphere - 安全角色到用户/组的映射
- c# - ASP.NET MVC 显示 SQL Server 表数据
- tfs - 使 TFS 用户拥有自己的看板的最佳方法是什么
- google-cloud-platform - 如何阻止 GCP 实例组终止