在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 相关文章推荐
Linux下Python获取IP地址的代码
Nov 30 Python
Python计算一个文件里字数的方法
Jun 15 Python
基python实现多线程网页爬虫
Sep 06 Python
详解python基础之while循环及if判断
Aug 24 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
将python文件打包成EXE应用程序的方法
May 22 Python
Python中py文件转换成exe可执行文件的方法
Jun 14 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
简单了解django文件下载方式
Feb 10 Python
浅析matlab中imadjust函数
Feb 27 Python
PyTorch device与cuda.device用法
Apr 03 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中取得image按钮传递的name值
2006/10/09 PHP
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
IE autocomplete internet explorer's autocomplete
2007/06/30 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JS闭包与延迟求值用法示例
2016/12/22 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
Python将图片转换为字符画的方法
2020/06/16 Python
python sys.argv[]用法实例详解
2018/05/25 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
环境工程大学生自荐信
2013/10/21 职场文书
财务会计毕业生自荐信
2013/11/02 职场文书
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
大学生村官承诺书
2014/03/28 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
工厂车间标语
2014/06/19 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
工作会议简报
2015/07/20 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python