浅谈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 31 Python
Python 文件管理实例详解
Nov 10 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
使用Python更换外网IP的方法
Jul 09 Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
Python中logger日志模块详解
Aug 04 Python
python实现图像随机裁剪的示例代码
Dec 10 Python
python实现简单的名片管理系统
Apr 26 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/03/05 PHP
分享php邮件管理器源码
2016/01/06 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
javascript学习笔记(三)BOM和DOM详解
2014/09/30 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
AngularJS 如何在控制台进行错误调试
2016/06/07 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
python常见数制转换实例分析
2015/05/09 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
如何强制垃圾回收
2015/10/06 面试题
下面关于"联合"的题目的输出是什么
2013/08/06 面试题
2014年会计人员工作总结
2014/12/10 职场文书
党员年度个人总结
2015/02/14 职场文书
停电放假通知
2015/04/14 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Python中文纠错的简单实现
2021/07/07 Python