损失和准确率之间的关系

在训练CNN模型时,是否有可能在每个epoch中损失和准确率都在下降?我在训练时得到了下面的结果。

enter image description here

有人能解释一下为什么会发生这种情况的可能原因吗?


回答:

至少有5个原因可能会导致这种行为:

  1. 异常值:假设你有10张完全相同的图片,其中9张属于类别A,1张属于类别B。在这种情况下,模型会开始为这个例子分配高概率的类别A,因为大多数例子都是如此。但是,来自异常值的信号可能会使模型不稳定,从而导致准确率下降。理论上,模型应该稳定在为类别A分配90%的得分,但这可能需要很多个epoch。

    解决方案:为了处理这样的例子,我建议你使用梯度裁剪(你可以在优化器中添加这样的选项)。如果你想检查这种现象是否发生,你可以查看你的损失分布(训练集中各个例子的损失)并寻找异常值。

  2. 偏差:现在假设你有10张完全相同的图片,但其中5张被分配到类别A,5张被分配到类别B。在这种情况下,模型会尝试在这两个类别上分配大约50%-50%的分布。现在,你的模型在这里最多能达到50%的准确率——从两个有效类别中选择一个。

    解决方案:尝试增加模型的容量——通常你有一组非常相似的图片——增加表达能力可能有助于区分相似的例子。不过要注意过拟合。另一种解决方案是尝试在你的训练中使用这种策略。如果你想检查这种现象是否发生,请查看各个例子的损失分布。如果分布偏向较高值,那么你可能正遭受偏差的影响。

  3. 类别不平衡:现在假设你的90%图片属于类别A。在训练的早期阶段,你的模型主要集中在将这个类别分配给几乎所有例子。这可能会使个别损失达到非常高的值,并通过使预测分布更加不稳定来使你的模型不稳定。

    解决方案:再次使用梯度裁剪。第二件事——耐心,尝试简单地让你的模型运行更多epoch。模型应该在训练的后期阶段学习到更细微的差别。当然——尝试类别平衡——通过分配sample_weightsclass_weights。如果你想检查这种现象是否发生,请查看你的类别分布。

  4. 过强的正则化:如果你设置的正则化过于严格——训练过程主要集中在使你的权重具有较小的范数,而不是实际学习有趣的见解。

    解决方案:添加categorical_crossentropy作为指标,并观察它是否也在下降。如果没有——那么这意味着你的正则化过于严格——尝试减少权重惩罚。

  5. 模型设计不当——这种行为可能是由错误的模型设计引起的。有几种好的做法可以应用以改进你的模型:

    批量归一化——通过这种技术,你可以防止模型的内部网络激活发生剧烈变化。这使得训练更加稳定和高效。对于小批量大小,这也可能是正则化模型的有效方法。

    梯度裁剪——这使得模型训练更加稳定和高效。

    减少瓶颈效应——阅读这篇精彩的论文,并检查你的模型是否可能遭受瓶颈问题的影响。

    添加辅助分类器——如果你从头开始训练你的网络,这应该会使你的特征更加有意义,并使你的训练更快、更有效。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注