验证损失振荡很多,验证准确性>学习准确性,但是测试准确性很高。我的模型拟合过度吗?

时间:2019-03-26 00:00:18

标签: optimization deep-learning conv-neural-network

  1. 我正在训练一个模型,并使用作者的原始学习速度(我也使用他们的github),我得到的验证损失一直在波动,它会减少,但随后突然跳升到一个很大的值,然后再次降低,但从未真正收敛,因为它获得的最低值是2(而训练损耗则收敛到0.0左右-远低于1)

在每个时期,我都会得到训练的准确性,最后是验证的准确性。验证准确性始终大于训练准确性。

当我对真实的测试数据进行测试时,我得到了很好的结果,但是我想知道我的模型是否过拟合。我希望一个好的模型的val损失能以与训练损失相似的方式收敛,但这不会发生,而且val损失有时会波动到非常大的值,这让我感到担忧。

  1. 调整学习率和调度程序等后,我将val损失和训练损失降低了,并减少了振荡,但是这次我的测试准确性仍然很低(以及训练和验证的准确性)

我确实尝试了一些带有步骤调度程序的优化器(adam,sgd,adagrad),还尝试了pytorch的pleateu,我使用了步长等,但是它并没有真正的帮助,也没有剪切渐变。

  1. 我的模型是否过拟合?
  2. 如果是这样,除了数据扩充之外,如何减少过度拟合?
  3. 如果不是这样(我读过一些关于洋人的人说,没什么可担心的,尽管我认为那一定是过拟合的),我如何证明这一点呢?即使通过k倍实验获得相似的结果,也足够好吗?我不认为这是合理的。我应该如何进行?

1 个答案:

答案 0 :(得分:1)

每个时期的训练损失通常根据整个训练集进行计算。
通常在验证集的一个小批量上计算每个时期的验证损失( ),因此噪声较大是正常的。

解决方案:您可以报告不同时期的验证损失的指数移动平均值,以减少波动。


因为您的验证精度不低于训练精度,所以它不是过拟合的。实际上,由于您的验证准确性>训练准确性,听起来您的模型不合适。