浅谈keras 模型用于预测时的注意事项


Posted in Python onJune 27, 2020

为什么训练误差比测试误差高很多?

一个Keras的模型有两个模式:训练模式测试模式一些正则机制,如Dropout,L1/L2正则项在测试模式下将不被启用。

另外,训练误差是训练数据每个batch的误差的平均。在训练过程中,每个epoch起始时的batch的误差要大一些,而后面的batch的误差要小一些。另一方面,每个epoch结束时计算的测试误差是由模型在epoch结束时的状态决定的,这时候的网络将产生较小的误差。

【Tips】可以通过定义回调函数将每个epoch的训练误差和测试误差并作图,如果训练误差曲线和测试误差曲线之间有很大的空隙,说明你的模型可能有过拟合的问题。当然,这个问题与Keras无关。

在keras中文文档中指出了这一误区,笔者认为产生这一问题的原因在于网络实现的机制。即dropout层有前向实现和反向实现两种方式,这就决定了概率p是在训练时候设置还是测试的时候进行设置

利用预训练的权值进行Fine tune时的注意事项:

不能把自己添加的层进行将随机初始化后直接连接到前面预训练后的网络层

in order to perform fine-tuning, all layers should start with properly trained weights: for instance you should not slap a randomly initialized fully-connected network on top of a pre-trained convolutional base. This is because the large gradient updates triggered by the randomly initialized weights would wreck the learned weights in the convolutional base. In our case this is why we first train the top-level classifier, and only then start fine-tuning convolutional weights alongside it.

we choose to only fine-tune the last convolutional block rather than the entire network in order to prevent overfitting, since the entire network would have a very large entropic capacity and thus a strong tendency to overfit. The features learned by low-level convolutional blocks are more general, less abstract than those found higher-up, so it is sensible to keep the first few blocks fixed (more general features) and only fine-tune the last one (more specialized features).

fine-tuning should be done with a very slow learning rate, and typically with the SGD optimizer rather than an adaptative learning rate optimizer such as RMSProp. This is to make sure that the magnitude of the updates stays very small, so as not to wreck the previously learned features.

补充知识:keras框架中用keras.models.Model做的时候预测数据不是标签的问题

我们发现,在用Sequential去搭建网络的时候,其中有predict和predict_classes两个预测函数,前一个是返回的精度,后面的是返回的具体标签。但是,在使用keras.models.Model去做的时候,就会发现,它只有一个predict函数,没有返回标签的predict_classes函数,所以,针对这个问题,我们将其改写。改写如下:

def my_predict_classes(predict_data):
  if predict_data.shape[-1] > 1:
    return predict_data.argmax(axis=-1)
  else:
    return (predict_data > 0.5).astype('int32')
 
# 这里省略网络搭建部分。。。。
 
model = Model(data_input, label_output)
model.compile(loss='categorical_crossentropy',
       optimizer=keras.optimizers.Nadam(lr=0.002),
       metrics=['accuracy'])
model.summary()
 
y_predict = model.predict(X_test)
y_pre = my_predict_classes(y_predict)

这样,y_pre就是具体的标签了。

以上这篇浅谈keras 模型用于预测时的注意事项就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的下载8000首儿歌的代码分享
Nov 21 Python
你应该知道的python列表去重方法
Jan 17 Python
利用python爬取软考试题之ip自动代理
Mar 28 Python
Django 导出 Excel 代码的实例详解
Aug 11 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
Python语法之精妙的十个知识点(装B语法)
Jan 18 Python
windows下python安装pip方法详解
Feb 10 Python
Pandas时间序列基础详解(转换,索引,切片)
Feb 26 Python
在keras里面实现计算f1-score的代码
Jun 15 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 Python
python suds访问webservice服务实现
Jun 26 #Python
解析Python 偏函数用法全方位实现
Jun 26 #Python
Python如何优雅删除字符列表空字符及None元素
Jun 25 #Python
使用pytorch实现论文中的unet网络
Jun 24 #Python
python连接mysql有哪些方法
Jun 24 #Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
Jun 24 #Python
Python Tornado核心及相关原理详解
Jun 24 #Python
You might like
php数组使用规则分析
2015/02/27 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
javascript 变量作用域 代码分析
2009/06/26 Javascript
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
css配合jquery美化 select
2013/11/29 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
python字典多键值及重复键值的使用方法(详解)
2016/10/31 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
利用python画出AUC曲线的实例
2020/02/28 Python
简单了解Django项目应用创建过程
2020/07/06 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
网页设计个人找工作求职信
2013/11/28 职场文书
电子商务个人自荐信
2013/12/12 职场文书
法制宣传实施方案
2014/03/13 职场文书
自我鉴定标准格式
2014/03/19 职场文书
一年级评语大全
2014/04/23 职场文书
任命书范本大全
2014/06/06 职场文书
民主生活会剖析材料
2014/09/30 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
队名及霸气口号大全
2015/12/25 职场文书