python - 训练第二个模型,同时在第一个模型的相同第一层中使用权重
问题描述
假设我们有两个模型,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")
解决方案
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 权重,但仅加载匹配的层名称。图层必须具有相同的形状和类型。
推荐阅读
- java - 以编程方式将视图的宽度设置为相对于设备屏幕
- javascript - 取消选中reactjs中的复选框不起作用
- css - css3 使用两个动画:第二个动画不是从第一个动画位置开始
- python - Errno 36:文件名太长:“testLogisticRegression”
- angular - 从 Angular 应用程序登录另一个网站,并在代码中完成身份验证(绕过 UI 登录)
- javascript - 在具有动态值的 Vue.js 数据属性中使用 import/require
- ios - Swift 不直接从其他视图控制器推断枚举类型
- codeigniter-3 - Codeigniter,当我尝试更新时,单引号显示为'
- spring-boot - Thymeleaf sec:authorize 标签不适用于 Spring Boot
- spring - 将 select 子句中使用的别名表达式用于条件查询的 order by 子句