如何使用训练有素的模型作为其他模型的输入?

时间:2019-11-22 14:35:32

标签: 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= 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的权重会发生什么?他们会保持未经训练的状态吗?

我想使用训练有素的model1和训练有素model2预测来训练model3。我可以写这样的东西吗?

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)

恐怕在训练model3时,这会改变模型1和2的已训练权重。在这种情况下,模型1和2的权重会发生什么?

1 个答案:

答案 0 :(得分:0)

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

另一种选择是分支像this这样的层。