训练过程中验证精度高于训练精度可能的原因

可能的原因:

1.  在数据集很大的时候,loss下降很明显。train loss是平均一个epoch内的所有loss,比如第一个epoch的loss是2.3,2.2,2.1...0.7,0.6 平均train loss是1.5,  而val的时候是用已经训练了一个epoch的model进行测试的,假设拟合的很好验证集的loss平均是0.7左右, 那么这个时候val的平均效果肯定就更好了

2. data augmentation也会导致这样的现象。因为data augmentation的本质就是把训练集变得丰富,制造数据的多样性和学习的困难来让network更robust(比如旋转,随机crop,scale),但是val和test的时候一般是不对数据进行data augmentation的。(有时候会center crop,如果train的时候有crop的话)

3. 也有可能是 drop out的影响,drop out可以理解为随机屏蔽掉一些feature(神经元),只用一部分 feature 来识别,这样留下来的这些feature就更强了。 等 test/val 的时候全部神经元一起上,表现就更好了,drop out一般用于fc层中

4. 其实在ImageNet等大数据集训练的前期到中期一直有这样的现象,一般都是最后验证精度才被训练精度反超。其原因就是对参与训练的数据加了很多data argumentation技巧,例如:rescale,随机crop等等,一般不对test/val数据进行数据增强,比如直接进行crop中心操作

5. (1)数据集太小的话,如果数据集切分的不均匀,或者说训练集和测试集的分布不均匀。这时要重新切分数据集或者扩充数据集,使其分布一样

(2)在训练期间,Dropout将这些分类器的随机集合切掉,因此,训练准确率将受到影响。在测试期间,Dropout将自动关闭,并允许使用神经网络中的所有弱分类器,因此,测试精度提高

注意:测试集精度大于训练精度并不是一个普遍现象,需要仔细检查数据集的质量、模型的结构以及训练过程中的各种参数设置


参考链接:https://blog.csdn.net/IT_flying625/article/details/105013514

                  https://www.zhihu.com/question/270731692/answer/358553887 

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值