在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 相关文章推荐
python处理圆角图片、圆形图片的例子
Apr 25 Python
python使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
浅谈Python的文件类型
May 30 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Python处理PDF与CDF实例
Feb 26 Python
python 解决Fatal error in launcher:错误问题
May 21 Python
Docker如何部署Python项目的实现详解
Oct 26 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
Python 阶乘详解
Oct 05 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
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
jQuery的学习步骤
2011/02/23 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
javascript基本类型详解
2014/11/28 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
js字符串处理之绝妙的代码
2019/04/05 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
Python专用方法与迭代机制实例分析
2014/09/15 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
详解django自定义中间件处理
2018/11/21 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Pycharm修改python路径过程图解
2020/05/22 Python
python支持多继承吗
2020/06/19 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
预备党员思想汇报
2014/01/08 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
写演讲稿要注意的六件事
2014/01/14 职场文书
一年级班主任寄语
2014/01/19 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
python flappy bird小游戏分步实现流程
2022/02/15 Python