如何在 keras 中连接两个预训练模型?

时间:2021-03-29 10:24:10

标签: python keras

我有两个预先训练好的模型,我想将它们连接起来。 模型 1: model1.png

模型 2:model2.png

我想要的连接结果是:merged.png

这是我从头开始创建模型时权重丢失的代码。

我想要这样的东西,但又不想减肥。

input_layer1= Input(shape=(20))

x=Dense(32,'relu')(input_layer)
x=Dense(16,'relu')(x)

out1=Dense(1,'sigmoid')(x)

input_layer2=Concatenate()([input_layer1,out1])

x=Dense(256,'relu')(input_layer2)
x=Dense(128,'relu')(x)
x=Dense(64,'relu')(x)
x=Dense(32,'relu')(x)

out2=Dense(y_train2.shape[1],'softmax')(x)

model = Model(inputs=input_layer1, outputs=out2)

1 个答案:

答案 0 :(得分:3)

使用功能模型方法,一个模型可以被称为一个函数,并且可以用作另一个模型中的一个层。这样的事情应该可以工作:

git

其中 import tensorflow as tf import tensorflow.keras.layers as L def build_model1(): input_layer = L.Input((20,)) x = L.Dense(32)(input_layer) x = L.Dense(16)(x) output_layer = L.Dense(1)(x) model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer) return model def build_model2(): input_layer = L.Input((21,)) x = L.Dense(256)(input_layer) x = L.Dense(128)(x) x = L.Dense(64)(x) x = L.Dense(32)(x) output_layer = L.Dense(10)(x) model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer) return model def build_model_composite(model1, model2): input_layer = L.Input((20,)) out1 = model1(input_layer) conc = L.Concatenate()([input_layer, out1]) out2 = model2(conc) # xtrainshape = y_train2.shape[1] xtrainshape = 10 output_layer = L.Dense(xtrainshape, "softmax")(out2) model = tf.keras.models.Model(inputs=input_layer, outputs=output_layer) return model model1 = build_model1() model2 = build_model2() comp_model = build_model_composite(model1, model2) comp_model.summary() tf.keras.utils.plot_model( comp_model, show_shapes=True, ) model1 可以独立训练。

复合模型如下所示:

composite_model

我从未真正尝试过这样的训练(我只使用标准的预训练模型进行迁移学习),所以请告诉我它是否按预期工作。

干杯!