【问题标题】:Difference in Model Performance when using Validation set/ Testing set使用验证集/测试集时模型性能的差异
【发布时间】:2019-12-26 03:08:51
【问题描述】:

我已经实现了一个用于分类和回归的 PyTorch NN 代码。

分类: a) 使用 stratifiedKfolds 进行交叉验证(K=10- 表示 10 折交叉验证)

我对数据进行了划分:如下: 假设我有 100 个数据:10 个用于测试,18 个用于验证,72 个用于训练。

b) 损失函数 = CrossEntropy

c) 优化 = SGD

d) 提前停止,其中等待时间 = 100 个时期。

Problem is:
Baseline Accuracy = 51%
Accuracy on Training set = 100%
Accuracy on validation set = 90%
Accuracy on testing set = 72%

我不明白测试数据/验证数据的巨大性能差异背后的原因是什么?

我该如何解决这个问题?

回归:

a) 使用相同的网络结构

b) 损失函数 = MSELoss

c) 优化 = SGD

d) 提前停止,其中等待时间 = 100 个时期。

e) 使用 K-fold 进行交叉验证。

我对数据进行了划分:如下:

假设我有 100 个数据:10 个用于测试,18 个用于验证,72 个用于训练。

Problem is:
Baseline MSE= 14.0
Accuracy on Training set = 0.0012
Accuracy on validation set = 6.45
Accuracy on testing set = 17.12

我不明白测试数据/验证数据的巨大性能差异背后的原因是什么?

我该如何解决这些问题?或者这对于 NN/ 取决于特定的数据集是显而易见的吗?

【问题讨论】:

    标签: neural-network classification regression pytorch


    【解决方案1】:

    您在训练和验证性能之间以及验证和测试性能之间存在很大差距。有两个问题需要探讨:

    1. 分布差异。我们假设 train / val / test 集都来自相同的分布,因此具有相似的特征。一个训练有素的模型应该在验证数据集和测试数据集上表现同样出色。如果您的数据集确实只有 10 个用于测试的样本和 18 个用于验证的样本,那么选择的样本很可能会扭曲这些数据集中的一个/两个,因此它们不再具有相似的特征。因此,您的 val 和测试性能之间的差异可能只是机会:您的测试集恰好更难。您可以通过手动检查来测试。

    2. 对 val 的过度拟合:但是,我认为您更有可能尝试过不同的架构、训练机制等,并调整了参数以获得验证集的最佳性能。这意味着您已经将模型过度拟合到您的验证集。测试集更真实地反映了模型的准确性。

    您对这两个问题的训练准确率都非常高,而且训练和验证性能之间存在很大差距。因此,您对训练数据过度拟合,因此需要减少训练,或引入更严格的正则化。

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2023-03-27
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2013-06-09
      • 2018-07-20
      相关资源
      最近更新 更多