在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中用startswith()函数判断字符串开头的教程
Apr 07 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
python如何为创建大量实例节省内存
Mar 20 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Python引用计数操作示例
Aug 23 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
python 消除 futureWarning问题的解决
Dec 25 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
Mar 17 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python如何输出警告信息
Jul 30 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编写的SVN类
2013/07/18 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
js关闭模态窗口刷新父页面或跳转页面
2012/12/13 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
node.js中的buffer.fill方法使用说明
2014/12/14 Javascript
jQuery实现首页顶部可伸缩广告特效代码
2015/04/15 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python中return函数返回值实例用法
2020/11/19 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
美国打印机墨水和碳粉购物网站:QuikShip Toner
2018/08/29 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
早餐连锁店计划书
2014/01/08 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
中层干部培训方案
2014/06/16 职场文书
借名购房协议书范本
2014/10/06 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
解决python3安装pandas出错的问题
2021/05/20 Python
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python