在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 11 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
快速入门python学习笔记
Dec 06 Python
Python找出最小的K个数实例代码
Jan 04 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
Jan 22 Python
Python堆排序原理与实现方法详解
May 11 Python
Python装饰器的执行过程实例分析
Jun 04 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
Aug 30 Python
解析PyCharm Python运行权限问题
Jan 08 Python
python在linux环境下安装skimage的示例代码
Oct 14 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
PHP扩展开发教程(总结)
2015/11/04 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
javascript 操作符(~、&、|、^、)使用案例
2014/12/31 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python 默认参数问题的陷阱
2016/02/29 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python 美化输出信息的实例
2018/10/15 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
利用python开发app实战的方法
2019/07/09 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
基于spring boot 日志(logback)报错的解决方式
2020/02/20 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
总经理助理岗位职责
2013/11/08 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
初中教师业务学习材料
2014/05/12 职场文书
品牌服务方案
2014/06/03 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python