使用预训练的 VGG-16 验证损失和准确性都在增加

时间:2021-06-16 14:24:10

标签: deep-learning pytorch loss-function transfer-learning overfitting-underfitting

所以,我正在对大约 12600 张图像进行 4 标签 X 射线图像分类:
Class1:4000
Class2:3616
Class3:1345
Class4:4000
我正在使用与 imageNet 数据集相关的 VGG-16 架构,具有交叉熵和 SGD,批大小为 32,学习率为 1e-3,在 pytorch 上运行

enter image description here

   [[749.,   6.,  50.,   2.],
    [  5., 707.,   9.,   1.],
    [ 56.,   8., 752.,   0.],
    [  4.,   1.,   0., 243.]]

我知道因为两个 train loss/acc 都是相对 0/1,所以模型过度拟合,但我很惊讶 val acc 仍然在 0.9 左右! 如何正确解释它以及导致它的原因以及如何预防它? 我知道这有点像因为准确度是 softmax 的 argmax 就像实际预测越来越低但 argmax 总是保持不变,但我真的很困惑!我什至让它训练 +64 epochs 相同的结果平坦的acc,而损失逐渐增加!

附注。我看过其他有答案的问题,并没有真正得到解释

1 个答案:

答案 0 :(得分:1)

我认为您的问题已经说明了正在发生的事情。正如您所发现的那样,您的模型过度拟合。现在,随着您进行更多训练,您的模型会慢慢变得更加专业化,并逐渐失去泛化能力。所以 softmax 概率变得越来越平坦。但是它仍然显示出或多或少与验证集相同的准确性,因为现在正确的类别至少比其他类别的概率略高。所以在我看来,这可能有一些原因:

  • 您的训练集和验证集可能来自不同的分布。
  • 您的验证集并未涵盖需要评估的所有情况,它可能包含相似类型的图像,但它们并没有太大差异。因此,当模型可以识别出一个时,它可以从验证集中识别出其中的许多。如果您在验证集中添加更多异构图像,您将不再在验证集中看到如此大的准确率。
  • 同样,我们可以说您的训练集具有异构图像,即它们有很多变化,而验证集仅涵盖少数种类,因此随着训练的进行,这些少数群体的优先级越来越低,因为模型还有很多东西需要学习和概括。如果您增强训练集并且模型发现验证集最初相对容易(直到过度拟合),就会发生这种情况,但是随着训练的进行,模型会在学习训练集中可用的许多增强变体时丢失自身。在这种情况下,不要使增强过于狂野。想一想,增强图像是否仍然真实。对图像进行增强,只要它们保持真实,并且这些图像的每种类型的变化在训练集中占据足够的代表性示例。不要在增强中包含那些在现实中永远不会发生的不必要的情况,因为这些不切实际的例子只会增加模型的负担,而不是提供任何帮助。
相关问题