首页 > 解决方案 > 如何使用训练有素的模型作为另一个模型的输入?

问题描述

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

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 的权重会发生什么?

标签: pythontensorflowkerasmodeldeep-learning

解决方案


我不确定 keras 是否以这种方式工作,但即使它确实如此,只要层是可训练的,它仍然会改变权重。尝试冻结图层。这些链接可能对您有所帮助12

另一种选择是像这样对图层进行分支。


推荐阅读