在Keras中实现保存和加载权重及模型结构


Posted in Python onJune 15, 2020

1. 保存和加载模型结构

(1)保存为JSON字串

json_string = model.to_json()

(2)从JSON字串重构模型

from keras.models import model_from_json
model = model_from_json(json_string)

(3)保存为YAML字串

yaml_string = model.to_yaml()

(4)从YAML字串重构模型

model = model_from_yaml(yaml_string)

2. 保存和加载模型权重(参数)

from keras.models import load_model
 
# 创建HDF5文件'my_model.h5',保存模型参数
model.save('my_model.h5')
 
# 加载模型参数
load_model('my_model.h5')

2.1 处理已保存模型中的自定义层(或其他自定义对象)

如果要加载的模型包含自定义层或其他自定义类或函数,则可以通过 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})

2019年6月1号更新:

更详细的使用方法:

如何保存Keras模型?

(1)一个HDF5文件即保存模型的结构又保存模型的权重

我们不推荐使用pickle或cPickle来保存Keras模型。

你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含:

模型的结构,以便重构该模型

模型的权重

训练配置(损失函数,优化器等)

优化器的状态,以便于从上次训练中断的地方开始

使用keras.models.load_model(filepath)来重新实例化你的模型,如果文件中存储了训练配置的话,该函数还会同时完成模型的编译。

例子:

from keras.models import load_model
 
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model
 
# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')

(2)只保存模型的结构

如果你只是希望保存模型的结构,而不包含其权重或配置信息,可以使用:

# save as JSON
json_string = model.to_json()
 
# save as YAML
yaml_string = model.to_yaml()

这项操作将把模型序列化为json或yaml文件,这些文件对人而言也是友好的,如果需要的话你甚至可以手动打开这些文件并进行编辑。

当然,你也可以从保存好的json文件或yaml文件中载入模型:

# model reconstruction from JSON:
from keras.models import model_from_json
model = model_from_json(json_string)
 
# model reconstruction from YAML
model = model_from_yaml(yaml_string)

(3)只保存模型的权重

如果需要保存模型的权重,可通过下面的代码利用HDF5进行保存。注意,在使用前需要确保你已安装了HDF5和其Python库h5py。

model.save_weights('my_model_weights.h5')

如果你需要在代码中初始化一个完全相同的模型,请使用:

model.load_weights('my_model_weights.h5')

如果你需要加载权重到不同的网络结构(有些层一样)中,例如fine-tune或transfer-learning,你可以通过层名字来加载模型:

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)
"""
# new model
model = Sequential()
model.add(Dense(2, input_dim=3, name="dense_1")) # will be loaded
model.add(Dense(10, name="new_dense")) # will not be loaded
 
# load weights from first model; will only affect the first layer, dense_1.
model.load_weights(fname, by_name=True)

以上这篇在Keras中实现保存和加载权重及模型结构就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python列表的增删改查实例代码
Jan 30 Python
python操作mysql代码总结
Jun 01 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
python对离散变量的one-hot编码方法
Jul 11 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
pyqt5使用按钮进行界面的跳转方法
Jun 19 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
Python字符串的修改方法实例
Dec 19 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
简单了解Python多态与属性运行原理
Jun 15 #Python
Python类super()及私有属性原理解析
Jun 15 #Python
Keras 实现加载预训练模型并冻结网络的层
Jun 15 #Python
Python StringIO及BytesIO包使用方法解析
Jun 15 #Python
Python smtp邮件发送模块用法教程
Jun 15 #Python
pandas数据处理之绘图的实现
Jun 15 #Python
keras中的loss、optimizer、metrics用法
Jun 15 #Python
You might like
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
php更新修改excel中的内容实例代码
2014/02/26 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
ECMAScript 5中的属性描述符详解
2015/03/02 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
js实现楼层导航功能
2017/02/23 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
详解AngularJS用Interceptors来统一处理HTTP请求和响应
2017/06/08 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python实现的生成word文档功能示例
2019/08/23 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python实现最短路径的实例方法
2020/07/19 Python
爬虫代理的cookie如何生成运行
2020/09/22 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
酒店司机岗位职责
2013/12/14 职场文书
运动会获奖感言
2014/02/11 职场文书
歌唱比赛主持词
2014/03/18 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
2015年国庆节寄语
2015/08/17 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电