我正在尝试在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)
实现多个输入是在您的类的call
方法中完成的,有两种选择:
列表输入,这里的inputs
参数应该是包含所有输入的列表,这里的优点是它可以是可变大小。您可以使用=
运算符索引解压缩参数列表:
def call(self, inputs):
Z = inputs[0] * inputs[1]
return Z
call
方法中的多个输入参数有效,但是在定义层时参数的数量是固定的:
def call(self, input1, input2):
Z = input1 * input2
return Z
无论选择哪种实现方法,这取决于您需要固定大小的参数还是可变大小的参数。
在您的示例中不需要__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]))
以这种方式尝试
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()