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中的一些陷阱与技巧小结
Jul 10 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python操作word常见方法示例【win32com与docx模块】
Jul 17 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
python实现简易数码时钟
Feb 19 Python
python处理两种分隔符的数据集方法
Dec 12 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
python匿名函数用法实例分析
Aug 03 Python
基于jupyter代码无法在pycharm中运行的解决方法
Apr 21 Python
基于python实现查询ip地址来源
Jun 02 Python
python如何在word中存储本地图片
Apr 07 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实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
2018/11/05 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
基于VUE的v-charts的曲线显示功能
2019/10/01 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
Python Socket编程入门教程
2014/07/11 Python
如何解决django配置settings时遇到Could not import settings 'conf.local'
2014/11/18 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
使用Python对Access读写操作
2017/03/30 Python
浅析python的Lambda表达式
2019/02/27 Python
python实现kmp算法的实例代码
2019/04/03 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
金融专业个人的自我评价
2013/10/18 职场文书
工程部主管岗位职责
2013/11/17 职场文书
光盘行动倡议书
2014/02/02 职场文书
世界红十字日活动总结
2015/02/10 职场文书
工作自我推荐信范文
2015/03/25 职场文书
公司董事任命书
2015/09/21 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
用python基于appium模块开发一个自动收取能量的小助手
2021/09/25 Python
Mysql数据库group by原理详解
2022/07/07 MySQL