浅谈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 Sleep休眠函数使用简单实例
Feb 02 Python
Python使用Supervisor来管理进程的方法
May 28 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
Python基于列表list实现的CRUD操作功能示例
Jan 05 Python
Python实现学校管理系统
Jan 11 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
Python编程中类与类的关系详解
Aug 08 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python object类中的特殊方法代码讲解
Mar 06 Python
Python tkinter实现日期选择器
Feb 22 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
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP session 会话处理函数
2016/06/06 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
详解Python中的文件操作
2016/08/28 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
使用python批量修改文件名的方法(视频合并时)
2020/03/24 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Python3.9新特性详解
2020/10/10 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
你对IPv6了解程度
2016/02/09 面试题
销售总监岗位职责
2014/01/04 职场文书
团队会宣传标语
2014/10/09 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
pandas中DataFrame重置索引的几种方法
2021/05/24 Python