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内置函数Type()函数一个有趣的用法
Feb 18 Python
浅谈function(函数)中的动态参数
Apr 30 Python
快速了解Python中的装饰器
Jan 11 Python
Python3生成手写体数字方法
Jan 30 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python实现串口通信的示例代码
Feb 10 Python
python入门之井字棋小游戏
Mar 05 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python3爬虫mitmproxy的安装步骤
Jul 29 Python
Python绘制组合图的示例
Sep 18 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
网络资源
2006/10/09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
JavaScript Accessor实现说明
2010/12/06 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
详解JavaScript中getFullYear()方法的使用
2015/06/10 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python两种遍历字典(dict)的方法比较
2014/05/29 Python
自动化Nginx服务器的反向代理的配置方法
2015/06/28 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python数据库小程序源代码
2019/09/15 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
面向对象编程的优势是什么
2015/12/17 面试题
亿企通软件测试面试题
2012/04/10 面试题
金融专业大学生自我评价
2014/01/09 职场文书
公司会计岗位职责
2014/02/13 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技