Keras: model实现固定部分layer,训练部分layer操作


Posted in Python onJune 28, 2020

需求:Resnet50做调优训练,将最后分类数目由1000改为500。

问题:网上下载了resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5,更改了Resnet50后,由于所有层均参加训练,导致训练速度慢。实际上只需要训练最后3层,前面的层都不需要训练。

解决办法:

①将模型拆分为两个模型,一个为前面的notop部分,一个为最后三层,然后利用model的trainable属性设置只有后一个model训练,最后将两个模型合并起来。

②不用拆分,遍历模型的所有层,将前面层的trainable设置为False即可。代码如下:

for layer in model.layers[:-3]:
 print(layer.trainable)
 layer.trainable = False

注意事项:

①尽量不要这样:

layers.Conv2D(filters1, (1, 1), trainable=False)(input_tensor)

因为容易出错。。。

②加载notop参数时注意by_name=True.

补充知识:Keras关于训练冻结部分层

设置冻结层有两种方式。

(不推荐)是在搭建网络时,直接将某层的trainable设置为false,例如:

layers.Conv2D(filters1, (1, 1), trainable=False)(input_tensor)

在网络搭建完成时,遍历model.layer,然后将layer.trainable设置为False:

# 冻结网络倒数的3层
for layer in model.layers[:-3]:
 print(layer.trainable)
 layer.trainable = False

也可以根据layer.name来确定哪些层需要冻结,例如冻结最后一层和RNN层:

for layer in model.layers:
 layerName=str(layer.name)
 if layerName.startswith("RNN_") or layerName.startswith("Final_"):
 layer.trainable=False

可以在实例化之后将网络层的 trainable 属性设置为 True 或 False。为了使之生效,在修改 trainable 属性之后,需要在模型上调用 compile()。

这是一个例子

x = Input(shape=(32,))
layer = Dense(32)
layer.trainable = False
y = layer(x)
 
frozen_model = Model(x, y)
# 在下面的模型中,训练期间不会更新层的权重
frozen_model.compile(optimizer='rmsprop', loss='mse')
 
layer.trainable = True
trainable_model = Model(x, y)
# 使用这个模型,训练期间 `layer` 的权重将被更新
# (这也会影响上面的模型,因为它使用了同一个网络层实例)
trainable_model.compile(optimizer='rmsprop', loss='mse')
 
frozen_model.fit(data, labels) # 这不会更新 `layer` 的权重
trainable_model.fit(data, labels) # 这会更新 `layer` 的权重

在网络搭建时,可以考虑最后一个分类层命名和分类数量关联,这样当费雷数量方式变化时,model.load_weight(“weight.h5”,by_name=True)不会加载最后一层

以上这篇Keras: model实现固定部分layer,训练部分layer操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
jupyter notebook的安装与使用详解
May 18 Python
Python bisect模块原理及常见实例
Jun 17 Python
python suds访问webservice服务实现
Jun 26 Python
scrapy-splash简单使用详解
Feb 21 Python
sklearn的predict_proba使用说明
Jun 28 #Python
基于python实现ROC曲线绘制广场解析
Jun 28 #Python
Python sklearn中的.fit与.predict的用法说明
Jun 28 #Python
浅谈sklearn中predict与predict_proba区别
Jun 28 #Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 #Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 #Python
PyTorch的torch.cat用法
Jun 28 #Python
You might like
PHP文本数据库的搜索方法
2006/10/09 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
使用typescript构建Vue应用的实现
2019/08/26 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
Python批量转换文件编码格式
2015/05/17 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python分布式环境下的限流器的示例
2017/10/26 Python
Python列表解析配合if else的方法
2018/06/23 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
会计电算化个人求职信范文
2014/01/24 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
高三霸气励志标语
2014/06/24 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL