浅谈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最长公共子串算法实例
Mar 07 Python
Python遍历指定文件及文件夹的方法
May 09 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 Python
python 平衡二叉树实现代码示例
Jul 07 Python
Python 利用切片从列表中取出一部分使用的方法
Feb 01 Python
python Kmeans算法原理深入解析
Aug 23 Python
为什么说Python可以实现所有的算法
Oct 04 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 Python
Python经常使用的一些内置函数
Apr 11 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
笑谈配置,使用Smarty技术
2007/01/04 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
2013/07/02 PHP
php日历制作代码分享
2014/01/20 PHP
php读取3389的脚本
2014/05/06 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
动态加载JS文件的三种方法
2013/11/08 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
Bootstrap基本组件学习笔记之分页(12)
2016/12/08 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
python选择排序算法实例总结
2015/07/01 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
怎样声明接口
2014/09/19 面试题
城建学院毕业生自荐信
2014/01/31 职场文书
社区护士演讲稿
2014/08/27 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
蓬莱阁导游词
2015/02/04 职场文书
语文教师个人工作总结
2015/02/06 职场文书
开除通知书范本
2015/04/25 职场文书
用Python将库打包发布到pypi
2021/04/13 Python