如何在Tensorflow 2.x Keras自定义层中使用多个输入?

问题描述 投票:1回答:3

我正在尝试在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 input keras layer
3个回答
0
投票

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

  • 列表输入,这里的inputs参数应该是包含所有输入的列表,这里的优点是它可以是可变大小。您可以使用=运算符索引解压缩参数列表:

    def call(self, inputs):
        Z = inputs[0] * inputs[1]
    
        return Z
    
  • call方法中的多个输入参数有效,但是在定义层时参数的数量是固定的:

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

无论选择哪种实现方法,这取决于您需要固定大小的参数还是可变大小的参数。


-1
投票

在您的示例中不需要__init__,因为它没有做任何事情。

call可以具有任意数量的参数,因此__init__可以具有任何想要的参数。这是一个示例,只需使用两个参数:

import tensorflow as tf    

class ExampleLayer(tf.keras.layers.Layer):
    def call(self, inputs, mask):
        return inputs * mask

layer = ExampleLayer()
layer(tf.constant([2.0, 3.0, 4.0]), tf.constant([2.0, 3.0, 4.0]))

-1
投票

以这种方式尝试

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()
© www.soinside.com 2019 - 2024. All rights reserved.