【问题标题】:How to use multiple inputs in Tensorflow 2.x Keras Custom Layer?如何在 Tensorflow 2.x Keras 自定义层中使用多个输入?
【发布时间】:2020-09-05 12:37:11
【问题描述】:

我正在尝试在 Tensorflow-Keras 的自定义层中使用多个输入。用法可以是任何东西,现在它被定义为将蒙版与图像相乘。我搜索了 SO,我能找到的唯一答案是 TF 1.x,所以它没有任何好处。

class mul(layers.Layer):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # I've added pass because this is the simplest form I can come up with.
        pass
          
    def call(self, inputs):
        # magic happens here and multiplications occur
        return(Z)

【问题讨论】:

    标签: python tensorflow keras layer


    【解决方案1】:

    编辑:自 TensorFlow v2.3/2.4 起,合约将使用call 方法的输入列表。对于keras(不是tf.keras),我认为下面的答案仍然适用。

    在您的类的call 方法中实现多个输入,有两种选择:

    • 列表输入,这里inputs参数应该是一个包含所有输入的列表,这里的好处是它可以是可变大小的。您可以使用= 运算符对列表进行索引或解压缩参数:

        def call(self, inputs):
            Z = inputs[0] * inputs[1]
      
            #Alternate
            input1, input2 = inputs
            Z = input1 * input2
      
            return Z
      
    • call 方法中的多个输入参数,可以工作,但是在定义层时参数的数量是固定的:

        def call(self, input1, input2):
            Z = input1 * input2
      
            return Z
      

    您选择哪种方法来实现它取决于您需要固定大小或可变大小的参数数量。当然,每个方法都会改变调用层的方式,要么通过传递参数列表,要么在函数调用中逐个传递参数。

    您也可以在第一种方法中使用*args 以允许具有可变数量参数的call 方法,但总体而言,keras 自己的层需要多个输入(如ConcatenateAdd)使用列表实现。

    【讨论】:

    【解决方案2】:

    这样试试

    class mul(layers.Layer):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
            # I've added pass because this is the simplest form I can come up with.
            pass
    
        def call(self, inputs):
            inp1, inp2 = inputs
            Z = inp1*inp2
            return Z
    
    inp1 = Input((10))
    inp2 = Input((10))
    x = mul()([inp1,inp2])
    x = Dense(1)(x)
    model = Model([inp1,inp2],x)
    model.summary()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 2021-06-07
      • 1970-01-01
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多