在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 13 Python
使用Eclipse如何开发python脚本
Apr 11 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
Python解决走迷宫问题算法示例
Jul 27 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
基于python实现学生信息管理系统
Nov 22 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
结束运行python的方法
Jun 16 Python
python3实现名片管理系统(控制台版)
Nov 29 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
PHP4.04简明安装
2006/10/09 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
JavaScript正则表达式之multiline属性的应用
2015/06/16 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
vue实现在线学生录入系统
2020/05/30 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
基于Django的python验证码(实例讲解)
2017/10/23 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
Python实现王者荣耀自动刷金币的完整步骤
2021/01/22 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
摄影专业毕业生求职信
2014/03/13 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
医院护士见习期自我鉴定
2014/09/15 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
任命通知范文
2015/04/21 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书