Python 如何在Keras的一个模型中使用同一层/模型两次?
我正在尝试制作一个组合模型,它通过一个子模型(编码器)一次传递两个不同的图像,然后将两个结果连接起来,并将它们提供给最终的子模型,最终的子模型根据这两个潜在表示做出决策。我想对两幅图像使用相同的编码器以减少训练时间,因为如果我需要对图像进行编码,我只需要一个编码器?(我应该注意到,图像是相似的) 在制作编码器和最终子模型之后,我尝试使用以下行制作最终组合模型:Python 如何在Keras的一个模型中使用同一层/模型两次?,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我正在尝试制作一个组合模型,它通过一个子模型(编码器)一次传递两个不同的图像,然后将两个结果连接起来,并将它们提供给最终的子模型,最终的子模型根据这两个潜在表示做出决策。我想对两幅图像使用相同的编码器以减少训练时间,因为如果我需要对图像进行编码,我只需要一个编码器?(我应该注意到,图像是相似的) 在制作编码器和最终子模型之后,我尝试使用以下行制作最终组合模型: combinedModel = keras.Model(inputs=[encoder.input, encoder.input], o
combinedModel = keras.Model(inputs=[encoder.input, encoder.input], outputs=finalSubModel)
Keras不喜欢我像这样两次使用相同的模型,它给了我以下错误:
ValueError: The list of inputs passed to the model is redundant. All inputs should only appear once. Found: [<tf.Tensor 'input_2:0' shape=(None, 32, 32, 1) dtype=float32>, <tf.Tensor 'input_2:0' shape=(None, 32, 32, 1) dtype=float32>]
ValueError:传递到模型的输入列表是冗余的。所有输入只应出现一次。找到:[,]
在keras中,是否可能在一个模型中使用同一子模型两次,或者我是否必须为im使用的两种不同类型的图像使用单独的编码器?假设您有一个使用以下功能构建的模型:
def make_encoder(h, w, c):
inp = Input((h, w, c))
x = SomeLayer()(inp)
x = SomeLayer()(x)
....
out = OutLayer()(x)
return Model(inputs=[inp], outputs=[out])
现在,要创建一个组合模型,您需要为每个调用使用具有不同输入层的相同编码器。要理解最后一行,请查看以下内容:
def make_combined(h, w, c):
inp1 = Input((h, w, c))
inp2 = Input((h, w, c))
encoder = make_encoder(h, w, c)
encoded_1 = encoder(inp1)
encoded_2 = encoder(inp2)
# Concatenate the result
encoded_out = Concatenate()([encoded_1, encoded_2])
return Model(inputs=[inp1, inp2], outputs=[encoded_out])
注意,我使用两个不同的虚拟Input
层为同一个编码器提供单独的输入