keras 权重保存和权重载入方式


Posted in Python onMay 21, 2020

如果需要全部权重载入,直接使用权重载入方式

model.save_weights('./weigths.h5')
model2.load_weights('./weigths.h5')

但是有时候你只需要载入部分权重

所以你可以这样操作

首先,为所有层命名,在层中直接加入方法 name='layer1'

第二,使用,将你不需要载入权重的值更改名字。

最后,载入权重。

x=BatchNormalization(axis=channel_axis,name='layer2')(x)
 
model2.layers[-1].name='pred'
model2.load_weights('./weigths.h5',by_name=True)

上面的代码是对应的操作,这里我除了最后一层,其他层我都加载了权重,记住,by_name 必须赋值为True 这样才能够按照名称对应赋值权重。

注意:两个模型结构必须一样,不然可能出问题

补充知识:Keras中保存和加载权重及模型结构

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 相关文章推荐
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python实现的分层随机抽样案例
Feb 25 Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
python - asyncio异步编程
Apr 06 Python
Python机器学习之基础概述
May 19 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 #Python
Python通过文本和图片生成词云图
May 21 #Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 #Python
Python 实现敏感目录扫描的示例代码
May 21 #Python
基于python检查矩阵计算结果
May 21 #Python
Django 解决由save方法引发的错误
May 21 #Python
Python OrderedDict字典排序方法详解
May 21 #Python
You might like
PHP面向对象编程快速入门
2006/10/09 PHP
如何对PHP程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
php简单实现数组分页的方法
2016/04/30 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
php的PDO事务处理机制实例分析
2017/02/16 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
密码强度检测效果实现原理与代码
2013/01/04 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
JS运动基础框架实例分析
2015/03/03 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
vue addRoutes路由动态加载操作
2020/08/04 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
《Python之禅》中对于Python编程过程中的一些建议
2015/04/03 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
Python中异常重试的解决方案详解
2017/05/05 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
敬老院标语
2014/06/27 职场文书
失职检讨书大全
2015/01/26 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python