浅谈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即时网络爬虫项目启动说明详解
Feb 23 Python
python flask中静态文件的管理方法
Mar 20 Python
python爬取淘宝商品销量信息
Nov 16 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
python中的itertools的使用详解
Jan 13 Python
Django数据结果集序列化并展示实现过程
Apr 22 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
用 python 进行微信好友信息分析
Nov 28 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 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脚本的10个技巧(3)
2006/10/09 PHP
php&java(一)
2006/10/09 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python判断windows系统是32位还是64位的方法
2015/05/11 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
python3编码问题汇总
2016/09/06 Python
详解python3百度指数抓取实例
2016/12/12 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
pytorch中的上采样以及各种反操作,求逆操作详解
2020/01/03 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Python编写万花尺图案实例
2021/01/03 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
物流专业求职计划书
2014/01/10 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
劲霸男装广告词
2014/03/21 职场文书
六一儿童节主持词
2014/03/21 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书