Python 如何使用训练有素的模型作为另一个模型的输入?

Python 如何使用训练有素的模型作为另一个模型的输入?,python,tensorflow,keras,model,deep-learning,Python,Tensorflow,Keras,Model,Deep Learning,我将从代码开始,然后提出我的问题 model1_input= keras.Input(shape=(5,10)) x = layers.Dense(16, activation='relu')(model1_input) model1_output = layers.Dense(4)(x) model1= keras.Model(model1_input, model1_output, name='model1') model1.summary() //---- model2_input=

我将从代码开始,然后提出我的问题

model1_input= keras.Input(shape=(5,10))
x = layers.Dense(16, activation='relu')(model1_input)
model1_output = layers.Dense(4)(x)

model1= keras.Model(model1_input, model1_output, name='model1')
model1.summary()

//----

model2_input= keras.Input(shape=(5,10))
y = layers.Dense(16, activation='relu')(model2_input)
model2_output = layers.Dense(4)(y)

model2= keras.Model(model2_input, model2_output, name='model2')
model2.summary()

//----

model3_input= keras.Input(shape=(5, 10))
layer1 = model1(model3_input)
layer2 = model2(layer1)
model3_output = layers.Dense(1)(layer2)
model3= keras.Model(model3_input, model3_output , name='model3')
model3.summary()

model3.compile(loss='mse', optimizer='adam')
model3.fit(inputs, outputs, epochs=10, batch_size=32)
执行此代码时,模型1和模型2权重会发生什么变化?他们会不受训练吗

我想使用训练有素的模型1和训练有素的模型2预测来训练模型3。我能写这样的东西吗

model1_input= keras.Input(shape=(5,10))
x = layers.Dense(16, activation='relu')(model1_input)
model1_output = layers.Dense(4)(x)

model1= keras.Model(model1_input, model1_output, name='model1')
model1.summary()

model1.compile(loss='mse', optimizer='adam')
model1.fit(model1_inputs, model1_outputs, epochs=10, batch_size=32)

//----

model2_input= keras.Input(shape=(5,10))
y = layers.Dense(16, activation='relu')(model2_input)
model2_output = layers.Dense(4)(y)

model2= keras.Model(model2_input, model2_output, name='model2')
model2.summary()

model2.compile(loss='mse', optimizer='adam')
model2.fit(model2_inputs, model2_outputs, epochs=10, batch_size=32)

//----

model3_input= keras.Input(shape=(5, 10))
layer1 = model1(model3_input)
layer2 = model2(layer1)
model3_output = layers.Dense(1)(layer2)
model3= keras.Model(model3_input, model3_output , name='model3')
model3.summary()

model3.compile(loss='mse', optimizer='adam')
model3.fit(inputs, outputs, epochs=10, batch_size=32)

我担心当我训练模型3时,这会改变模型1和2已经训练的重量。在这种情况下,模型1和模型2的重量会发生什么情况?

我不确定keras是否以这种方式工作,但即使这样做,只要层是可训练的,它仍然会改变重量。试着冻结层。这些链接可能会帮助您


另一个选项是对层进行分支,如。

谢谢您的快速回答。我会检查这些链接。冻结图层似乎是一个不错的选择。一个糟糕的方法可能是使用模型1和2预测输出,并将结果作为模型3的输入用于培训。