CNN调参总结--关于时间与梯度下降高原

都说算法调参其实都是经验过程,此话有理。

这是以前遇到的坑:

加入BN层后预测与训练时准确率差距很大解决方案,is_traing参数(ResNet,GoogLeNet,Inception)

卷积神经网络提高准确率(shuffle,优化器,batchsize,权重初始化)通过某次实际CNN调参过程

在以前坑都解决的情况下,这次使用同样的网络解决一个类似的问题


任务目标

区分图像是否左右颠倒(因为是试纸检测,这个很重要),而且opencv无法处理,包括直方图等数字图像处理方法

正常图片:

颠倒图片:

所以拟定使用一个2M模型的CNN做分类。


直接看最后--解决,问题这一节只是记录下心路历程

问题

发生了这种一直0.5正确率,严重偏斜的问题

CNN调参总结--关于时间与梯度下降高原_第1张图片

这是我某下午的思考过程:

CNN调参总结--关于时间与梯度下降高原_第2张图片

甚至我产生这样的思考:通常来讲,做图像增强时,扩展数据时使用切割、翻转、加噪声等方式获得更多的图像,扩充训练集,CNN学习到的东西就是图像特征而无关正反图像等。后来还做了每个batch图片可视化以及中间层数据可视化,但是都无济于事。


解决

一定要贴合数据集本身的特点!

首先,将图片一分为3,这样特征就更加明显了,人眼也一下就能识别出不同,可以定义为两类。

正常图片:

颠倒图片:

但是!这个数据集还有一个特点,就是高原起手(梯度下降等同与下山,但是这个数据集就是最开始位于一个高原,所以一定要训练一定时间,才能有结果),tensorboard,是mini-batch的训练方式,大概35步为跑完一个训练集,所以7K步等价于200轮迭代,在前3、4K步时仍旧表示为0.5左右准确率,所以让我非常怀疑人生,以为各种错误,结果就是训练次数不够,无论什么学习率等参数都不行:

CNN调参总结--关于时间与梯度下降高原_第3张图片CNN调参总结--关于时间与梯度下降高原_第4张图片

但是,以上这样的可视化图还是挺奇怪的,为啥训练集和验证集会产生这样的延迟反应?(但是tensorboard可视化也不一定可全信,因为它会自动修正,发生错误时也告诉我训练集表现良好,我手动一测,表现并不好)

知道了,因为采用了全局平均池化层,该层的好处是速度快,模型小,避免过拟合,对输入空间更鲁棒,缺点是收敛速度慢。一些猜想是利用该层代替FC层导致了训练压力到卷积层所以卷积学习到的特征更加高级,收敛更慢。

总结

1.在保证网络绝对没问题的情况下,各种参数都没有问题,但是就是看不到结果,不妨狠下心来,学习率调整到一个较小的值,降低点效率保证结果准确,然后训练个一天一夜(像这种小网络,训练个几小时),再看看结果

2.利用好数据集本身的特点,这点太难了,都是摸索,泛泛而谈。

哦对,再有一点,不是adam这种优化器一定比SGD好,好多论文研究都是使用SGD,它虽然慢,但是基本都会有结果,这是它为什么经久不衰的地方

你可能感兴趣的:(#,视觉相关网络)