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 相关文章推荐
Django框架中render_to_response()函数的使用方法
Jul 16 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python得到单词模式的示例
Oct 15 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python如何爬取b站热门视频并导入Excel
Aug 10 Python
Python rabbitMQ如何实现生产消费者模式
Aug 24 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
Python+Appium实现自动抢微信红包
May 21 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 04 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代码
2007/03/03 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
关于laravel 子查询 & join的使用
2019/10/16 PHP
document.all与WEB标准
2020/05/13 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
jQuery代码优化方法总结
2018/01/29 jQuery
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
使用vue2.6实现抖音【时间轮盘】屏保效果附源码
2019/04/24 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
python算法学习之计数排序实例
2013/12/18 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
python变量的作用域是什么
2020/05/26 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
golang通过递归遍历生成树状结构的操作
2021/04/28 Golang
利用Python+OpenCV三步去除水印
2021/05/28 Python
MongoDB使用场景总结
2022/02/24 MongoDB
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js