• 测试集精度大于训练精度


    https://www.zhihu.com/question/64003151

    本文参考自:https://stackoverflow.com/questions/43979449/higher-validation-accuracy-than-training-accurracy-using-tensorflow-and-keras

          https://www.quora.com/How-can-I-explain-the-fact-that-test-accuracy-is-much-higher-than-train-accuracy

                

    如上图所示,有时候我们做训练的时候,会得到测试集的准确率或者验证集的准确率高于训练集的准确率,这是什么原因造成的呢?经过查阅资料,有以下几点原因,仅作参考,不对的地方,请大家指正。

    (1)数据集太小的话,如果数据集切分的不均匀,或者说训练集和测试集的分布不均匀,如果模型能够正确捕捉到数据内部的分布模式话,这可能造成训练集的内部方差大于验证集,会造成训练集的误差更大。这时你要重新切分数据集或者扩充数据集,使其分布一样

    (2)由Dropout造成,它能基本上确保您的测试准确性最好,优于您的训练准确性。Dropout迫使你的神经网络成为一个非常大的弱分类器集合,这就意味着,一个单独的分类器没有太高的分类准确性,只有当你把他们串在一起的时候他们才会变得更强大。

      因为在训练期间,Dropout将这些分类器的随机集合切掉,因此,训练准确率将受到影响

      在测试期间,Dropout将自动关闭,并允许使用神经网络中的所有弱分类器,因此,测试精度提高。

    训练集的数据做了一系列的增广,如旋转,仿射,模糊,添加噪点等操作;过多的增广使得训练集分布产生了变化。
    模型正则化过多,比如训练时dropout过多,和验证时的模型相差较大,验证时是不会有dropout的。
    训练的精度是每个batch产生的,而验证的精度一般是一个epoch后产生的,验证时的模型是训练一个个batch之后的,有一个的滞后性;可以说训练得差不多的模型用来验证,当然精度要高一点。
    ————————————————
    版权声明:本文为CSDN博主「yubajin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/m0_37223909/article/details/105980930

    所以,总的来说,训练集和测试集不是取自同一数据分布,测试集样本较少,模型比较简单,就有可能出现测试集误差反而低于训练集的现象。

    相应的解决方案就是,尽量从同一数据集划分训练集和测试集,保证测试集样本充足(比如增加数据)。不太建议单纯因为训练集误差高于测试集误差就换用复杂模型,这么做可能沦为强行过拟合、治标不治本。

  • 相关阅读:
    Liquid模板语言参考文档
    Shopify主题title/description等SEO设置
    23个Shopify免费模板值得拥有
    navicate 激活
    idea 内存溢出
    mysql for update 使用说明
    quartz-SimpleSemaphore
    达梦数据库冷备份还原的简单记录
    Beyond Compare 的比较以及导出的简单设置方法
    PG13 离线安装的简单办法
  • 原文地址:https://www.cnblogs.com/Ann21/p/15012703.html
Copyright © 2020-2023  润新知