浅谈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 相关文章推荐
wxPython事件驱动实例详解
Sep 28 Python
python实现用于测试网站访问速率的方法
May 26 Python
python2.7实现爬虫网页数据
May 25 Python
Python求解任意闭区间的所有素数
Jun 10 Python
python如何制作缩略图
Apr 30 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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
一个数据采集类
2007/02/14 PHP
php下保存远程图片到本地的办法
2010/08/08 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
js时间戳转为日期格式的方法
2015/12/28 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
Python中为feedparser设置超时时间避免堵塞
2014/09/28 Python
详解Python中的循环语句的用法
2015/04/09 Python
Python内置函数OCT详解
2016/11/09 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
Eclipse面试题
2014/03/22 面试题
2015年机关党委工作总结
2015/05/23 职场文书