如何在 Tensorflow 2.x Keras 自定义层中使用多个输入?
How to use multiple inputs in Tensorflow 2.x Keras Custom Layer?
我正在尝试在 Tensorflow-Keras 的自定义层中使用多个输入。用法可以是任何东西,现在它被定义为将蒙版与图像相乘。我已经搜索过了,我能找到的唯一答案是 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)
这样试试
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()
编辑:自 TensorFlow v2.3/2.4 起,合约将使用 call
方法的输入列表。对于 keras
(不是 tf.keras
),我认为下面的答案仍然适用。
在 class 的 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 自己的层接受多个输入(如 Concatenate
和 Add
) 是使用列表实现的。
我正在尝试在 Tensorflow-Keras 的自定义层中使用多个输入。用法可以是任何东西,现在它被定义为将蒙版与图像相乘。我已经搜索过了,我能找到的唯一答案是 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)
这样试试
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()
编辑:自 TensorFlow v2.3/2.4 起,合约将使用 call
方法的输入列表。对于 keras
(不是 tf.keras
),我认为下面的答案仍然适用。
在 class 的 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 自己的层接受多个输入(如 Concatenate
和 Add
) 是使用列表实现的。