浅谈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编码爬坑指南(必看)
Jun 10 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
浅谈Python中range和xrange的区别
Dec 20 Python
pandas groupby 分组取每组的前几行记录方法
Apr 20 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
python银行系统实现源码
Oct 25 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Python中os模块功能与用法详解
Feb 26 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 Python
详解python的异常捕获
Mar 03 Python
Elasticsearch 聚合查询和排序
Apr 19 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安全性需要注意的几点事项
2014/07/17 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
JQuery优缺点分析说明
2010/06/09 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
jQuery+HTML5美女瀑布流布局实现方法
2015/09/21 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
python rsa 加密解密
2017/03/20 Python
老生常谈Python基础之字符编码
2017/06/14 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
2016/07/13 HTML / CSS
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
黄河象教学反思
2014/02/10 职场文书
《搭石》教学反思
2014/04/07 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
职业规划实施方案
2014/06/10 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
冲出亚马逊观后感
2015/06/03 职场文书
感恩主题班会教案
2015/08/12 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android