浅谈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网络编程学习笔记(三):socket网络服务器
Jun 09 Python
Python实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
对TensorFlow的assign赋值用法详解
Jul 30 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
python 实现12bit灰度图像映射到8bit显示的方法
Jul 08 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Django框架反向解析操作详解
Nov 28 Python
python中upper是做什么用的
Jul 20 Python
python ssh 执行shell命令的示例
Sep 29 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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
基于mysql的bbs设计(二)
2006/10/09 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
python使用多线程不断刷新网页的方法
2015/03/31 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python requests指定出口ip的例子
2019/07/25 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
解决python运行启动报错问题
2020/06/01 Python
Html5 audio标签样式的修改
2016/01/28 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
全球精选男装和家居用品:Article
2020/04/13 全球购物
企业演讲稿范文
2013/12/28 职场文书
社团文化节邀请函
2014/01/10 职场文书
广播节目策划方案
2014/05/23 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
演讲稿开场白台词
2014/08/25 职场文书
整脏治乱工作简报
2015/07/21 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python