【问题标题】:How to create a keras model that depends dynamically on the input dimension (not batch size)?如何创建一个动态依赖于输入维度(而不是批量大小)的 keras 模型?
【发布时间】:2019-09-05 20:22:30
【问题描述】:

如果您使用 keras 子类 api,并且想要根据输入维度 x = (batch_dim, n) 生成一堆层 (n),有没有办法在构建方法中执行此操作?

或者是在 init 时间将输入 dim 传递到模型中以便可以在 init 范围内创建层的唯一方法?

更新:伪代码(未经测试)示例

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 允许这种没有任何成本损失的活力。

【问题讨论】:

    标签: keras tensorflow2.0


    【解决方案1】:

    是的,不是使用batch_shape = (batch_size, input_dim),而是使用batch_shape=(None, input_dim),它允许任意数量的batch_size。

    【讨论】:

    • 我的意思是如果我想创建不同尺寸的 input_dim 模型。因此,如果输入数据的维度为 10,我将创建 10 个完全独立的模型。这可能必须发生在我认为的“构建”方法中。
    • “如果输入数据的维度为 10,我将创建 10 个完全独立的模型”是什么意思。可以举个例子吗?
    • 写了一个速写
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2017-10-21
    • 2021-05-22
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多