浅谈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的多重继承的理解
Aug 06 Python
python执行使用shell命令方法分享
Nov 08 Python
Python3.4实现远程控制电脑开关机
Feb 22 Python
python实现简单登陆流程的方法
Apr 22 Python
python3+PyQt5自定义视图详解
Apr 24 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python实现贪吃蛇游戏
Mar 21 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
浅析python redis的连接及相关操作
Nov 07 Python
如何使用Python发送HTML格式的邮件
Feb 11 Python
python调用百度API实现人脸识别
Nov 17 Python
python Tkinter的简单入门教程
Apr 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
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
php面向对象的方法重载两种版本比较
2008/09/08 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
script标签的 charset 属性使用说明
2010/12/04 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
js计算精度问题小结
2013/04/22 Javascript
jquery的选择器的使用技巧之如何选择input框
2013/09/22 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
canvas绘制七巧板
2017/02/03 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
爱岗敬业演讲稿范文
2014/01/14 职场文书
高中生期末评语
2014/01/28 职场文书
思想品德自我评价
2014/02/04 职场文书
工作违纪检讨书
2014/02/17 职场文书
测量工程专业求职信
2014/02/24 职场文书
服务之星事迹材料
2014/05/03 职场文书
销售员试用期自我评价
2014/09/15 职场文书
护理专业自荐信范文
2015/03/06 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python