首页 > 解决方案 > 训练第二个模型,同时在第一个模型的相同第一层中使用权重

问题描述

假设我们有两个模型,model1 和 model2。假设模型 1 和模型 2 的前 10 层相同。然后你用一些数据集在 Keras 中训练 model1。您将模型保存在“model1.h5”中。然后你意识到模型1的权重​​对于启动你的训练模型2很有用。我想做这样的事情:

# make model1  and model2
# then set weights for the first 10 layers
model1.load_model("model1.h5")
model2.set_weights[:10] = model1.get_weights[:10]
model2.compile(...)
model2.fit(...)
model2.save("model2.h5")

标签: pythonkeraskeras-layer

解决方案


model.load_weights(file, by_name=True)使用该选项执行此操作的一种干净方法。您需要为共享的图层分配相同的名称:

# model 1 ...
model1.add(Dense(64, name="dense1"))
model1.add(Dense(2, name="dense2"))

# model 2 ...
model2.add(Dense(64, name="dense1"))
model2.add(Dense(32, name="notshared"))

# train model 1 and save
model1.save(filename) # or model.save_weights(filename)

# Load shared layers into model 2
model2.load_weights(filename, by_name=True) # will skip non-matching layers
# So it will only load "dense1"

要点是您从模型 1 权重文件加载模型 2 权重,但仅加载匹配的层名称。图层必须具有相同的形状和类型。


推荐阅读