Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Keras的一个模型中使用同一层/模型两次?_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

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
层为同一个编码器提供单独的输入