浅谈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 zip文件 压缩
Dec 24 Python
python实现dnspod自动更新dns解析的方法
Feb 14 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
python频繁写入文件时提速的方法
Jun 26 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
python中spy++的使用超详细教程
Jan 29 Python
python编写五子棋游戏
May 25 Python
Pillow图像处理库安装及使用
Apr 12 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&java(一)
2006/10/09 PHP
smarty中js的调用方法示例
2014/10/27 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
php显示页码分页类的封装
2017/06/08 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
js资料toString 方法
2007/03/13 Javascript
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
Javascript 读后台cookie代码
2008/09/15 Javascript
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
javascript 极速 隐藏/显示万行表格列只需 60毫秒
2009/03/28 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
JS中的算法与数据结构之集合(Set)实例详解
2019/08/20 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
Python中为什么要用self探讨
2015/04/14 Python
python 编码规范整理
2018/05/05 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
django框架F&Q 聚合与分组操作示例
2019/12/12 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Django-imagekit的使用详解
2020/07/06 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
小学教师国培感言
2014/02/08 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android