我的验证准确率高于我的训练准确率,而且我的准确率也没有变化

问题描述 投票:0回答:1

我正在使用 kaggle 的数据集训练 CNN 模型(AlexNet- 具有随机权重)。 我的超参数是学习率:0.001,批量大小:64,损失函数:交叉熵损失,优化器:Adam Optimizer。我的验证准确率比我的训练高很多,从下图可以看出两者都没有变化。

我已经多次检查代码,它适用于其他超参数,例如学习率 0.0001,批量大小:32,如图中所示。

有人可以告诉为什么会这样吗? 下面是学习率的混淆矩阵:0.001,批量大小:64,损失函数:交叉熵损失,优化器:Adam Optimizer

machine-learning deep-learning pytorch conv-neural-network kaggle
1个回答
0
投票

如提供的混淆矩阵所示,模型通过预测训练集中所有实例的标签 2 欠拟合数据。

这可能也发生在验证集上,并且在这种情况下验证准确率更高的原因是因为验证集上label-2实例的比例更高。

事实证明,所选择的超参数集使模型在成本函数表面上的某些局部最小值处发臭。如果您还不熟悉这个概念,下面是成本函数表面的图示:

由于欠拟合模型是无用的,您需要探索一些选项来修复您的模型训练。

不幸的是,这里没有确定性路径。然而,有一些共同的建议,特别是对于欠拟合模型的情况:

  1. 检查数据:如果数据不能表达输入和输出之间的关系,您需要修复它(通过添加特征、清理或添加数据等)。虽然我不认为这是你特定问题的原因,但通常我们也会在欠拟合时检查数据。

  2. 检查模型:由于模型容量低,有时会出现欠拟合。尝试更大的模型(更多可训练参数)可以解决这个问题。小心并慢慢添加参数。真正更大的模型可能会导致您的模型过度拟合。最好的方法是从一个小模型开始并增加它直到你没有达到预期的性能。

  3. 尝试不同的优化器:如果您使用的是 Pytorch 或 Tensorflow 等 ML 库,则很容易更改训练优化器,例如 Adam、RMSProp、SGD 等......有时,Adam 提供最快的结果,有时则不然't.

  4. 调整超参数:在这里我们可以使用几个参数。学习率和批量大小密切相关。小批量通常需要小的学习率。一个非常重要且经常被遗忘的超参数是权重初始化。通常,您可以通过选择不同的权重初始化器来避免局部最小值。

处理欠拟合和过拟合是模型训练中的常见场景。有时,我们可能要花很多时间才能意识到问题出在哪里(初始化、学习率、模型大小等)。我认为关于超参数选择的深入讨论超出了这个答案的范围。如果您对其中一些有具体问题,请毫不犹豫地提出。

最后一句话:仅使用准确性来评估模型性能是危险的。正如您的示例所示,尽管第一个模型完全无法使用,但它实现了中等性能 (54%)。要获得更有洞察力的反馈,请使用其他更合适的指标。我想为您的问题推荐的是精度和召回率:

如果您不知道什么是局部/全局最小值,请在此处查看

如果您不知道什么是欠拟合,请在此处查看

© www.soinside.com 2019 - 2024. All rights reserved.