验证和测试精度差异很大

Validation and Testing accuracy widely different

我目前正在研究 kaggle 中的数据集。在对训练数据模型进行训练后,我在验证数据上对其进行了测试,准确率约为 0.49。

但是,同一模型在测试数据上的准确率为 0.05。

我正在使用神经网络作为我的模型

那么,发生这种情况的可能原因是什么?如何开始检查和纠正这些问题?

泛化差距大的原因:

  1. 不同的分布:验证集和测试集可能来自不同的分布。尝试验证它们确实是从您代码中的同一进程中采样的。
  2. 样本数:验证和/或测试集的大小太低。这意味着经验数据分布差异太大,解释了报告的不同准确性。一个例子是包含数千张图像的数据集,但也有数千张 类。然后,测试集可能包含一些不在验证集中的 类(反之亦然)。使用交叉验证来检查测试准确度是否总是低于验证准确度,或者它们是否通常在每次折叠中相差很多。
  3. Hyperparameter Overfitting:这个也跟两个集合的大小有关。你做过超参数调整吗?如果是这样,您可以在调整超参数之前检查是否存在精度差距,因为您可能 "overfitted" 验证集上的超参数。
  4. 损失函数与准确度:您报告了不同的准确度。您是否还检查了训练、验证和测试损失?你在损失函数上训练你的模型,所以这是最直接的性能度量。如果准确性仅与您的损失函数松散耦合并且测试损失大约与验证损失一样低,则可能解释准确性差距。
  5. 代码中的错误:如果测试集和验证集是从同一过程中抽取的并且足够大,则它们可以互换。这意味着测试和验证损失必须大致相等。所以,如果你检查了以上四点,我的下一个最佳猜测是代码中的错误。例如,您不小心也在验证集上训练了您的模型。您可能想在更大的数据集上训练您的模型,然后检查精度是否仍然存在差异。