【问题标题】:What is the relationship between loss and validation accuracy?损失和验证准确率之间有什么关系?
【发布时间】:2017-03-23 16:09:19
【问题描述】:

我正在尝试通过微调 VGG16 网络(在 ImageNet 上预训练)来进行迁移学习,以便在更小的数据集(11000 张图像,200 个类别)上进行图像分类。我实际上只训练修改后的 VGG16 网络的最后 3 个 FC 层。我在 3 个 FC 层中的两个上添加了 dropout,概率为 0.5。

所以,当我在这个网络上进行训练时,除了用原作者给出的 VGG_MEAN 值减去图像中的每个通道外,我没有做任何花哨的预处理。

所以问题是训练似乎进展顺利,损失大幅下降并稳定在某个值附近,并且我正在监控网络在特定批次数量后对验证集(20% 的数据)的预测准确性受过训练。 我注意到平均验证准确度没有显示出任何改进的趋势——平均验证准确度在整个训练过程中波动,而我实际上希望这会逐渐增加。我确保在推理时不要打乱验证数据。

我曾尝试降低学习率,微调更少的层但无济于事。如果损失是表明模型实际上正在学习的替代指标,那么为什么会出现验证准确度的差异?

(1) 是因为我一开始只有很少的训练数据吗? (2) 原始 Imagenet 数据集有 1000 个类别,但我的分类任务更细粒度,并且有原始 ImageNet 类别数量的 1/5(想想分类鸟类的种类,或不同的灵长类动物)。这可能是一个问题吗? 我希望有一些解决此类问题经验的人的意见和反馈。

【问题讨论】:

  • 如果我理解得很好,您的损失函数正在减少,但您的验证损失不再下降,这表明您过度拟合您的训练集。如果是这种情况,请尝试惩罚您的参数以避免过度拟合。
  • 向 FC7 和 FC6 层添加 0.5 的 dropout 并没有改善任何东西。事实上,验证的准确性太差了,我简直被难住了。

标签: deep-learning


【解决方案1】:

我知道(训练)损失的值与训练准确度密切相关。如果训练时损失减少,训练准确率就会提高。但训练损失与验证准确性之间没有很强的关系。如果训练损失在减少并且验证准确率在增加,那么这就是我们所期望的。但是,如果训练损失在减少,而验证准确度下降到饱和,则可能会发生过度拟合。在这种情况下,应该停止训练并调整一些参数,例如正则化的权重衰减和辍学率。

所以验证准确率不能直接用训练损失代替。如果可能的话,应该使用validation accuracy,而不是只看learning loss的曲线。以上是我的理解。

【讨论】:

    【解决方案2】:

    事实证明,我遇到了一个“细粒度”分类问题。鸟类的图像看起来非常相似,这给网络学习带来了问题。

    【讨论】:

    • 您好,因此,在您看来,针对较少的课程进行微调并不是一个好主意。我还在为 50 类布料微调 VGG16。而且我看到损失并没有下降,它只是在 7000-4000 之间波动,平均在 5000 左右。我还没有进行任何验证。
    • @Rusty,不完全是......我的意思是在我的情况下分类问题太细了 - 来自不同类的图像看起来非常相似。例如,区分两种树比区分树和汽车更难。
    • 好的。那么损失是否有任何意义,例如它应该始终小于某个值等,或者我应该只依赖验证准确性?
    猜你喜欢
    • 2018-06-10
    • 2020-03-28
    • 1970-01-01
    • 2019-09-06
    • 2016-03-23
    • 2020-04-27
    • 2021-03-01
    • 1970-01-01
    • 2018-12-21
    相关资源
    最近更新 更多