Keras 实现加载预训练模型并冻结网络的层


Posted in Python onJune 15, 2020

在解决一个任务时,我会选择加载预训练模型并逐步fine-tune。比如,分类任务中,优异的深度学习网络有很多。

ResNet, VGG, Xception等等... 并且这些模型参数已经在imagenet数据集中训练的很好了,可以直接拿过来用。

根据自己的任务,训练一下最后的分类层即可得到比较好的结果。此时,就需要“冻结”预训练模型的所有层,即这些层的权重永不会更新。

以Xception为例:

加载预训练模型:

from tensorflow.python.keras.applications import Xception
model = Sequential()
model.add(Xception(include_top=False, pooling='avg', weights='imagenet'))
model.add(Dense(NUM_CLASS, activation='softmax'))

include_top = False : 不包含顶层的3个全链接网络

weights : 加载预训练权重

随后,根据自己的分类任务加一层网络即可。

网络具体参数:

model.summary

得到两个网络层,第一层是xception层,第二层为分类层。

由于未冻结任何层,trainable params为:20, 811, 050

Keras 实现加载预训练模型并冻结网络的层

冻结网络层:

由于第一层为xception,不想更新xception层的参数,可以加以下代码:

model.layers[0].trainable = False

Keras 实现加载预训练模型并冻结网络的层

冻结预训练模型中的层

如果想冻结xception中的部分层,可以如下操作:

from tensorflow.python.keras.applications import Xception
model = Sequential()
model.add(Xception(include_top=False, pooling='avg', weights='imagenet'))
model.add(Dense(NUM_CLASS, activation='softmax'))
for i, layer in enumerate(model.layers[0].layers):
 if i > 115:
 layer.trainable = True
 else:
 layer.trainable = False
 print(i, layer.name, layer.trainable)

Keras 实现加载预训练模型并冻结网络的层

Keras 实现加载预训练模型并冻结网络的层

加载所有预训练模型的层

若想把xeption的所有层应用在训练自己的数据,并改变分类数。可以如下操作:

model = Sequential()
model.add(Xception(include_top=True, weights=None, classes=NUM_CLASS))

* 如果想指定classes,有两个条件:include_top:True, weights:None。否则无法指定classes

补充知识:如何利用预训练模型进行模型微调(如冻结某些层,不同层设置不同学习率等)

由于预训练模型权重和我们要训练的数据集存在一定的差异,且需要训练的数据集有大有小,所以进行模型微调、设置不同学习率就变得比较重要,下面主要分四种情况进行讨论,错误之处或者不足之处还请大佬们指正。

(1)待训练数据集较小,与预训练模型数据集相似度较高时。例如待训练数据集中数据存在于预训练模型中时,不需要重新训练模型,只需要修改最后一层输出层即可。

(2)待训练数据集较小,与预训练模型数据集相似度较小时。可以冻结模型的前k层,重新模型的后n-k层。冻结模型的前k层,用于弥补数据集较小的问题。

(3)待训练数据集较大,与预训练模型数据集相似度较大时。采用预训练模型会非常有效,保持模型结构不变和初始权重不变,对模型重新训练

(4)待训练数据集较大,与预训练模型数据集相似度较小时。采用预训练模型不会有太大的效果,可以使用预训练模型或者不使用预训练模型,然后进行重新训练。

以上这篇Keras 实现加载预训练模型并冻结网络的层就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python开发windows GUI程序入门实例
Oct 23 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python实现的桶排序算法示例
Nov 29 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
python爬虫 线程池创建并获取文件代码实例
Sep 28 Python
python列表推导式操作解析
Nov 26 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
python通过opencv调用摄像头操作实例分析
Jun 07 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 #Python
Python smtp邮件发送模块用法教程
Jun 15 #Python
pandas数据处理之绘图的实现
Jun 15 #Python
keras中的loss、optimizer、metrics用法
Jun 15 #Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 #Python
基于python和flask实现http接口过程解析
Jun 15 #Python
基于nexus3配置Python仓库过程详解
Jun 15 #Python
You might like
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
2013/06/05 PHP
php结合web uploader插件实现分片上传文件
2016/05/10 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
基于jQuery的遍历同id元素 并响应事件的代码
2012/06/14 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
python脚本和网页有何区别
2020/07/02 Python
selenium自动化测试入门实战
2020/12/21 Python
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
Oakley西班牙官方商店:太阳眼镜和男女运动服
2019/04/26 全球购物
网吧消防安全制度
2014/01/28 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers