在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基础语法(Python基础知识点)
Feb 28 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python使用asyncio包处理并发详解
Sep 09 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
python实现百度语音识别api
Apr 10 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python实现简单图片物体标注工具
Mar 18 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
python3处理word文档实例分析
Dec 01 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输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
js实现省份下拉菜单效果
2017/02/15 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
2018/08/17 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
Vue 自定义标签的src属性不能使用相对路径的解决
2019/09/17 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
[02:56]DOTA2上海特锦赛小组赛解说FreeAgain采访花絮
2016/02/27 DOTA
python实现ipsec开权限实例
2014/11/11 Python
复习Python中的字符串知识点
2015/04/14 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
基于python log取对数详解
2018/06/08 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
青蓝工程实施方案
2014/03/27 职场文书
安全教育观后感
2015/06/17 职场文书
催款函范文
2015/06/24 职场文书
家长会感言
2015/08/01 职场文书
高二语文教学反思
2016/02/16 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
netty 实现tomcat的示例代码
2022/06/05 Servers