我们如何在 KERAS 中的 Transfer Leaning 中加入/组合两个模型?
我有两个模型:模型 1 = 我的模型模型 2 = 训练模型
我可以通过将模型 2 作为输入来组合这些模型,然后将其输出传递给模型 1,这是常规方式。
但是,我正在以其他方式进行操作。我想将模型 1 作为输入,然后将其输出传递给模型 2(即训练模型一)。
我们如何在 KERAS 中的 Transfer Leaning 中加入/组合两个模型?
我有两个模型:模型 1 = 我的模型模型 2 = 训练模型
我可以通过将模型 2 作为输入来组合这些模型,然后将其输出传递给模型 1,这是常规方式。
但是,我正在以其他方式进行操作。我想将模型 1 作为输入,然后将其输出传递给模型 2(即训练模型一)。
这是完全相同的过程,只需确保您的模型的输出与其他模型的输入具有相同的形状。
from keras.models import Model
output = model2(model1.outputs)
joinedModel = Model(model1.inputs,output)
确保(如果这是您想要的),trainable=False
在编译之前使模型 2 中的所有层都具有,因此训练不会改变已经训练的模型。
测试代码:
from keras.layers import *
from keras.models import Sequential, Model
#creating model 1 and model 2 -- the "previously existing models"
m1 = Sequential()
m2 = Sequential()
m1.add(Dense(20,input_shape=(50,)))
m1.add(Dense(30))
m2.add(Dense(5,input_shape=(30,)))
m2.add(Dense(11))
#creating model 3, joining the models
out2 = m2(m1.outputs)
m3 = Model(m1.inputs,out2)
#checking out the results
m3.summary()
#layers in model 3
print("\nthe main model:")
for i in m3.layers:
print(i.name)
#layers inside the last layer of model 3
print("\ninside the submodel:")
for i in m3.layers[-1].layers:
print(i.name)
输出:
Layer (type) Output Shape Param #
=================================================================
dense_21_input (InputLayer) (None, 50) 0
_________________________________________________________________
dense_21 (Dense) (None, 20) 1020
_________________________________________________________________
dense_22 (Dense) (None, 30) 630
_________________________________________________________________
sequential_12 (Sequential) (None, 11) 221
=================================================================
Total params: 1,871
Trainable params: 1,871
Non-trainable params: 0
_________________________________________________________________
the main model:
dense_21_input
dense_21
dense_22
sequential_12
inside the submodel:
dense_23
dense_24
问题已解决。
我使用了该model.add()
函数,然后添加了模型 1 和模型 2 所需的所有层。
以下代码将在模型 1 之后添加模型 2的前10 层。
for i in model2.layers[:10]:
model.add(i)