如何将两个深度学习模型权重合二为一

数据挖掘 深度学习 喀拉斯 预测建模 lstm
2022-02-17 01:37:39

假设我有这两个模型(model1model2)从相同的结构化数据训练,但不同的数据集:

# create and fit the LSTM network on dataset1
model = Sequential()
model.add(LSTM(4, input_shape=(look_back, 6)))
model.add(Dense(1))
optimizer = Adam(lr=0.001, decay=0.00001)
model.compile(loss='mean_squared_error', optimizer=optimizer)
model.summary()
model1 = model.fit(trainX, trainY, epochs=100, batch_size=64, verbose=2)
model1.save_weights("Model1.h5")

# create and fit the LSTM network on dataset2
model = Sequential()
model.add(LSTM(4, input_shape=(look_back, 6)))
model.add(Dense(1))
optimizer = Adam(lr=0.001, decay=0.00001)
model.compile(loss='mean_squared_error', optimizer=optimizer)
model.summary()
model2 = model.fit(trainX, trainY, epochs=100, batch_size=64, verbose=2)
model2.save_weights("Model2.h5")

我如何结合Model1.h5andModel2.h5来假设Model3.h5哪个具有Model1.h5and的所有属性Model2.h5

任何帮助将不胜感激。

谢谢,

1个回答

合并模型并不像看起来那么简单。在我看来,我看到了多种可能性:

  1. 不要合并模型、合并数据集和重新训练:在我看来,这是最可靠的解决方案,模型是从代表数据和特征的特定分布的数据集中拟合的。如果您可以重新训练:重新训练,尤其是在数据集不同的情况下。

  2. 在模型上创建模型:使用您的模型作为特征提取器(剪切最终部分)并构建一个连体网络(从两个子模型并行计算特征),合并获得的特征并添加将从这些新特征集分类的顶层(只需重新训练最后一部分,冻结模型的图层)。使用这种方法,您可以重新训练一个新模型,该模型将保留两个模型的逻辑,而无需重新训练整个网络。如果从头开始重新训练模型太受限制,这种方法比第一种方法更好。

  3. 玩转模型的权重:您可以访问模型的权重并利用权重的层创建第三个模型。在我看来,你可以试试这个,但我非常怀疑这种方法,而是采用最好的模型并使用它。