我有两个预先训练好的模型,我想将它们连接起来。 模型 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)
答案 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
可以独立训练。
复合模型如下所示:
我从未真正尝试过这样的训练(我只使用标准的预训练模型进行迁移学习),所以请告诉我它是否按预期工作。
干杯!