浅谈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 相关文章推荐
python2.7的编码问题与解决方法
Oct 04 Python
python django 实现验证码的功能实例代码
May 18 Python
python机器学习库常用汇总
Nov 15 Python
对Python3之进程池与回调函数的实例详解
Jan 22 Python
Python----数据预处理代码实例
Mar 20 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
Python自定义一个异常类的方法
Jun 27 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
django如何实现视图重定向
Jul 24 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
基于jquery自己写tab滑动门(通用版)
2012/10/30 Javascript
img onload事件绑定各浏览器均可执行
2012/12/19 Javascript
Extjs 3.3切换tab隐藏相应工具栏出现空白解决
2013/04/02 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Django内容增加富文本功能的实例
2017/10/17 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
Pycharm无法使用已经安装Selenium的解决方法
2018/10/13 Python
pycharm远程开发项目的实现步骤
2019/01/20 Python
Python绘制热力图示例
2019/09/27 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
2020/03/20 Python
python获取linux系统信息的三种方法
2020/10/14 Python
python实现按日期归档文件
2021/01/30 Python
苹果音乐订阅:Apple Music
2018/08/02 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
大型晚会策划方案
2014/02/06 职场文书
《画家乡》教学反思
2014/04/22 职场文书
李敖北大演讲稿
2014/05/24 职场文书
邀请书模板
2015/02/02 职场文书
格林童话读书笔记
2015/06/30 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python