浅谈keras使用中val_acc和acc值不同步的思考


Posted in Python onJune 18, 2020

在一个比较好的数据集中,比如在分辨不同文字的任务中,一下是几个样本

浅谈keras使用中val_acc和acc值不同步的思考

使用VGG19,vol_acc和acc基本是同步保持增长的,比如

40/40 [==============================] - 23s 579ms/step - loss: 1.3896 - acc: 0.95 - val_loss: 1.3876 - val_acc: 0.95
Epoch 13/15
40/40 [==============================] - 23s 579ms/step - loss: 1.3829 - acc: 0.96 - val_loss: 1.3964 - val_acc: 0.96
Epoch 14/15
40/40 [==============================] - 23s 580ms/step - loss: 1.3844 - acc: 0.97 - val_loss: 1.3892 - val_acc: 0.97
Epoch 15/15
40/40 [==============================] - 24s 591ms/step - loss: 1.3833 - acc: 0.98 - val_loss: 1.4145 - val_acc: 0.98

这表明训练集和测试集同分布,在训练集中学习的特征确实可以应用到测试集中,这是最好的情况。

通过观察热力图也可以看到,最热的地方集中在特征上。比如在分辨不同的文字。

浅谈keras使用中val_acc和acc值不同步的思考

但很多时候,自己建立的数据集并不完美,或者可能不同类的特征分辨并不明显,这时候用cnn强行进行分类就会出现很多奇葩的情况。

考虑一种极端的情况,比如有四个类,而四个类都是同样的简单图形

浅谈keras使用中val_acc和acc值不同步的思考

那么在学习过程中,会出现如下特征的acc和vol_acc

40/40 [==============================] - 23s 579ms/step - loss: 1.3896 - acc: 0.2547 - val_loss: 1.3876 - val_acc: 0.2500
Epoch 13/15
40/40 [==============================] - 23s 579ms/step - loss: 1.3829 - acc: 0.2844 - val_loss: 1.3964 - val_acc: 0.2281
Epoch 14/15
40/40 [==============================] - 23s 580ms/step - loss: 1.3844 - acc: 0.2922 - val_loss: 1.3892 - val_acc: 0.2469
Epoch 15/15
40/40 [==============================] - 24s 591ms/step - loss: 1.3833 - acc: 0.2578 - val_loss: 1.4145 - val_acc: 0.2500

从热力图上看

浅谈keras使用中val_acc和acc值不同步的思考

可以看到因为没有什么特征,所有热力图分布也没有规律,可以说网络什么都没学到。

那么考虑中间的情况,比如很相似的类学习会怎么样?比如不同年份的硬币

浅谈keras使用中val_acc和acc值不同步的思考

40/40 [==============================] - 25s 614ms/step - loss: 0.0967 - acc: 0.9891 - val_loss: 0.3692 - val_acc: 0.8313
40/40 [==============================] - 23s 580ms/step - loss: 0.0476 - acc: 0.9953 - val_loss: 0.3994 - val_acc: 0.7906
40/40 [==============================] - 23s 578ms/step - loss: 0.0237 - acc: 0.9984 - val_loss: 0.5067 - val_acc: 0.7344
40/40 [==============================] - 23s 579ms/step - loss: 0.0184 - acc: 1.0000 - val_loss: 0.5192 - val_acc: 0.7531
40/40 [==============================] - 23s 582ms/step - loss: 0.0286 - acc: 0.9953 - val_loss: 0.9653 - val_acc: 0.6344
40/40 [==============================] - 23s 584ms/step - loss: 0.0138 - acc: 1.0000 - val_loss: 0.4780 - val_acc: 0.7688
40/40 [==============================] - 23s 583ms/step - loss: 0.0115 - acc: 0.9984 - val_loss: 0.5485 - val_acc: 0.7438
40/40 [==============================] - 23s 581ms/step - loss: 0.0096 - acc: 1.0000 - val_loss: 0.5658 - val_acc: 0.7406
40/40 [==============================] - 23s 578ms/step - loss: 0.0046 - acc: 1.0000 - val_loss: 0.5070 - val_acc: 0.7562

浅谈keras使用中val_acc和acc值不同步的思考

可以看到,虽然网络有一定分辨力,但是学习的特征位置并不对,这可能是网络的分辨力有限,或者数据集过小导致的,具体怎么解决还没有想清楚??可以看到,可以看到除非完全没有特征,否则train acc一定能到100%,但是这个是事没有意义的,这就是过拟合。

一开始同步增长,是在学习特征,后来volacc和acc开始有差异,就是过拟合

这可能是训练集过小导致的,如果图片中只有年份呢?

浅谈keras使用中val_acc和acc值不同步的思考

acc = 0.85,vol_acc=0.85
acc = 0.90,vol_acc=0.90  
acc = 0.92,vol_acc=0.92  
acc = 0.94,vol_acc=0.92

浅谈keras使用中val_acc和acc值不同步的思考

可以看到,还是能正确分类的,之所以硬币不能正确分类,是因为训练数据集过小,其他特征掩盖了年份的特征,只要增大数据量就行了。

另外。还有几点训练技巧:

1、拓展函数不要怕极端,极端的拓展函数有利于学到目标真正的特征。

2、使用灰度图作为训练集?如果以纹理为主,使用灰度图,灰度图能增强网络的鲁棒性,因为可以减少光照的影响,但是会损失颜色信息,可以用结果看看到底该使用哪种图?

3、使用小的分辨率图片可能错过某些特征,尤其是在小数据集的时候,所以可能的话使用大数据集,或者提高分辨率,根据使用者的目标。

以上这篇浅谈keras使用中val_acc和acc值不同步的思考就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现批量获取指定文件夹下的所有文件的厂商信息
Sep 28 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
Feb 21 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
opencv python图像梯度实例详解
Feb 04 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
Feb 29 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
python实现在线翻译
Jun 18 #Python
Python函数的迭代器与生成器的示例代码
Jun 18 #Python
使用python实现名片管理系统
Jun 18 #Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 #Python
浅谈keras.callbacks设置模型保存策略
Jun 18 #Python
用python实现名片管理系统
Jun 18 #Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 #Python
You might like
php采集时被封ip的解决方法
2010/08/29 PHP
php日历制作代码分享
2014/01/20 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
解密效果
2006/06/23 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
Javascript图像处理—平滑处理实现原理
2012/12/28 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jquery实现ajax提交form表单的方法总结
2014/03/03 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
ES6中箭头函数的定义与调用方式详解
2017/06/02 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
Python网络爬虫实例讲解
2016/04/28 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
对python中dict和json的区别详解
2018/12/18 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
python读写配置文件操作示例
2019/07/03 Python
python re模块常见用法例举
2021/03/01 Python
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
户外用品商店创业计划书
2014/01/29 职场文书
公司门卫工作职责
2014/06/28 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Python echarts实现数据可视化实例详解
2022/03/03 Python
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android