当前位置:网站首页>Keras如何保存、加载Keras模型
Keras如何保存、加载Keras模型
2022-04-23 06:11:00 【sunshinecxm_BJTU】
一、如何保存 Keras 模型?
1.保存/加载整个模型(结构 + 权重 + 优化器状态)
不建议使用 pickle 或 cPickle 来保存 Keras 模型。
你可以使用 model.save(filepath) 将 Keras 模型保存到单个 HDF5 文件中,该文件将包含:
- 模型的结构,允许重新创建模型
- 模型的权重 训练配置项(损失函数,优化器)
- 优化器状态,允许准确地从你上次结束的地方继续训练。
你可以使用 keras.models.load_model(filepath) 重新实例化模型。load_model 还将负责使用保存的训练配置项来编译模型(除非模型从未编译过)。
例子:
from keras.models import load_model
model.save('my_model.h5') # 创建 HDF5 文件 'my_model.h5'
del model # 删除现有模型
# 返回一个编译好的模型
# 与之前那个相同
model = load_model('my_model.h5')
另请参阅如何安装 HDF5 或 h5py 以在 Keras 中保存我的模型?,查看有关如何安装 h5py 的说明。
2.只保存/加载模型的结构
如果您只需要保存模型的结构,而非其权重或训练配置项,则可以执行以下操作:
# 保存为 JSON
json_string = model.to_json()
# 保存为 YAML
yaml_string = model.to_yaml()
生成的 JSON/YAML 文件是人类可读的,如果需要还可以手动编辑。
你可以从这些数据建立一个新的模型:
# 从 JSON 重建模型:
from keras.models import model_from_json
model = model_from_json(json_string)
# 从 YAML 重建模型:
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)
3. 只保存/加载模型的权重
如果您只需要 模型的权重,可以使用下面的代码以 HDF5 格式进行保存。
请注意,我们首先需要安装 HDF5 和 Python 库 h5py,它们不包含在 Keras 中。
model.save_weights('my_model_weights.h5')
假设你有用于实例化模型的代码,则可以将保存的权重加载到具有相同结构的模型中:
model.load_weights('my_model_weights.h5')
如果你需要将权重加载到不同的结构(有一些共同层)的模型中,例如微调或迁移学习,则可以按层的名字来加载权重:
model.load_weights('my_model_weights.h5', by_name=True)
例子:
"""
假设原始模型如下所示:
model = Sequential()
model.add(Dense(2, input_dim=3, name='dense_1'))
model.add(Dense(3, name='dense_2'))
...
model.save_weights(fname)
"""
# 新模型
model = Sequential()
model.add(Dense(2, input_dim=3, name='dense_1')) # 将被加载
model.add(Dense(10, name='new_dense')) # 将不被加载
# 从第一个模型加载权重;只会影响第一层,dense_1
model.load_weights(fname, by_name=True)
4. 处理已保存模型中的自定义层(或其他自定义对象)
如果要加载的模型包含自定义层或其他自定义类或函数,则可以通过 custom_objects 参数将它们传递给加载机制:
from keras.models import load_model
# 假设你的模型包含一个 AttentionLayer 类的实例
model = load_model('my_model.h5', custom_objects={
'AttentionLayer': AttentionLayer})
或者,你可以使用 自定义对象作用域:
from keras.utils import CustomObjectScope
with CustomObjectScope({
'AttentionLayer': AttentionLayer}):
model = load_model('my_model.h5')
自定义对象的处理与 load_model, model_from_json, model_from_yaml 的工作方式相同:
from keras.models import model_from_json
model = model_from_json(json_string, custom_objects={
'AttentionLayer': AttentionLayer})
版权声明
本文为[sunshinecxm_BJTU]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_36744449/article/details/124331611
边栏推荐
- DCMTK (dcm4che) works together with dicoogle
- Android暴露组件——被忽略的组件安全
- AVD Pixel_2_API_24 is already running.If that is not the case, delete the files at C:\Users\admi
- [recommendation of new books in 2021] enterprise application development with C 9 and NET 5
- torch.mm() torch.sparse.mm() torch.bmm() torch.mul() torch.matmul()的区别
- 机器学习笔记 一:学习思路
- Miscellaneous learning
- 给女朋友写个微信双开小工具
- Itop4412 surfaceflinger (4.4.4_r1)
- 实习做了啥
猜你喜欢
随机推荐
Android清除应用缓存
WebRTC ICE candidate里面的raddr和rport表示什么?
Bottom navigation bar based on bottomnavigationview
Binder mechanism principle
DCMTK (dcm4che) works together with dicoogle
HandlerThread原理和实际应用
【2021年新书推荐】Learn WinUI 3.0
Data class of kotlin journey
个人博客网站搭建
[exynos4412] [itop4412] [android-k] add product options
PyTorch 模型剪枝实例教程三、多参数与全局剪枝
Itop4412 cannot display boot animation (4.0.3_r1)
Component based learning (1) idea and Implementation
Tiny4412 HDMI display
Itop4412 kernel restarts repeatedly
adb shell 常用命令
MySQL notes 4_ Primary key auto_increment
素数求解的n种境界
iTOP4412 HDMI显示(4.4.4_r1)
MySQL笔记2_数据表