在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 相关文章推荐
pymssql ntext字段调用问题解决方法
Dec 17 Python
详解python脚本自动生成需要文件实例代码
Feb 04 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
Django实战之用户认证(初始配置)
Jul 16 Python
浅谈python之新式类
Aug 12 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
python动态进度条的实现代码
Jul 03 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
详解用python计算阶乘的几种方法
Aug 14 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
Apr 22 Python
python使用列表的最佳方案
Aug 12 Python
如何完美的建立一个python项目
Oct 09 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
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
教育科学研究生自荐信
2013/10/09 职场文书
小学生安全保证书
2014/02/01 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
年度考核自我鉴定
2014/03/19 职场文书
新店开张活动方案
2014/08/24 职场文书
工作时间证明
2015/06/15 职场文书
放假通知怎么写
2015/08/18 职场文书
妇产科护理心得体会
2016/01/22 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android