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 相关文章推荐
python实现ftp客户端示例分享
Feb 17 Python
一则python3的简单爬虫代码
May 26 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
在python中bool函数的取值方法
Nov 01 Python
pandas基于时间序列的固定时间间隔求均值的方法
Jul 04 Python
python3 pillow模块实现简单验证码
Oct 31 Python
python的faker库用法
Nov 28 Python
基于Tensorflow高阶读写教程
Feb 10 Python
Python日志syslog使用原理详解
Feb 18 Python
python subprocess pipe 实时输出日志的操作
Dec 05 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
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
2019/02/08 PHP
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
html5指南-2.如何操作document metadata
2013/01/07 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
如何做好总经理助理
2013/11/12 职场文书
房屋买卖协议书范本
2014/04/10 职场文书
学校安全生产承诺书
2014/05/23 职场文书
植树节口号
2014/06/21 职场文书
门面房租房协议书
2014/08/20 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
党支部季度考核意见
2015/06/02 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android