在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文件夹与文件的操作实现代码
Jul 13 Python
python制作爬虫爬取京东商品评论教程
Dec 16 Python
Python连接phoenix的方法示例
Sep 29 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
django自带的server 让外网主机访问方法
May 14 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 Python
Python如何解除一个装饰器
Aug 07 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
多广告投放代码 推荐
2006/11/13 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
Python中的默认参数实例分析
2018/01/29 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
区域销售经理职责
2013/12/22 职场文书
平安校园建设方案
2014/05/02 职场文书
入党积极分子评语
2014/05/04 职场文书
机关领导查摆四风思想汇报
2014/09/13 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
四风查摆问题自查报告
2014/10/10 职场文书
接待员岗位职责
2015/02/13 职场文书
深入理解python协程
2021/06/15 Python
Win11更新失败并提示0xc1900101
2022/04/19 数码科技