【问题标题】:Train Accuracy is very high, Validation accuracy is very high but the test set accuracy is very lowTrain Accuracy 非常高,Validation 准确率非常高但测试集准确率非常低
【发布时间】:2019-01-16 08:01:21
【问题描述】:

我已将数据集(大约 28K 图像)拆分为 75% 的训练集和 25% 的测试集。然后我随机抽取了 15% 的训练集和 15% 的测试集来创建验证集。目标是将图像分为两类。无法共享确切的图像样本。但它与所附的相似。我正在使用这个模型:带有 imagenet 权重的 VGG19,最后两层可训练并附加了 4 个密集层。我也在使用 ImageDataGenerator 来增强图像。我对模型进行了 30 个 epoch 的训练,发现训练准确度为 95%,验证准确度为 96%,当在测试数据集上训练时,它大幅下降到仅 75%。

我已经尝试过正则化和 dropout 来解决过度拟合问题。我还做了一件事,看看如果我使用测试集作为验证集并在同一个测试集上测试模型会发生什么。结果是:Trainset Acc = 96% 和 Validation ACC = 96.3% 和 testAcc = 68%。我不明白我该怎么办?

image

【问题讨论】:

  • 检查类不平衡。即检查您是否有一个在测试用例中但既不在训练集也不在验证集中的类。
  • 没有班级余额,我查过了。
  • 为什么有人反对我的问题?问题有什么问题?
  • @HarshVardhan 你找到解决方案了吗?我有类似的问题
  • @ManInMoon 如果你和我的一样,那么网络没有问题。我忘记在测试时对图像进行标准化。你也做了吗?检查一下。

标签: machine-learning keras deep-learning computer-vision conv-neural-network


【解决方案1】:

首先,您需要确保在拆分数据时,新数据集中每个类的相对大小相等。如果这是您的初始数据的分布,它可能是不平衡的,但它必须在拆分后的所有数据集中具有相同的不平衡。

现在,关于分裂。如果您需要训练集、验证集和测试集,它们都必须彼此独立(不共享样本)。如果您不想用得到的结果欺骗自己,这一点很重要。

一般来说,在机器学习中,我们从训练集和测试集开始。为了选择最佳模型架构/超参数,我们进一步划分训练集以获得验证集(不应触及测试集)。 在为我们的模型确定了最佳架构/超参数之后,我们将训练集和验证集结合起来,并从头开始使用组合的完整训练集训练最佳案例模型。只有现在我们才能在测试集上测试结果。

【讨论】:

  • 我没有分享训练集中的测试集样本。训练和测试完全分开。
  • @Mark.F 我也有类似的问题,并且随机拆分了训练/验证数据。当我训练时,我也会选择随机播放,并且我使用的是标准的(未经训练的)AlexNet。与 Harsh 类似,我的训练和验证准确度都很高(均为 0.8+),但测试准确度为 0.5。有什么建议吗?
【解决方案2】:

我在一个实践项目中遇到过类似的问题。 我的 InceptionV3 模型的训练准确度很高 (99%),验证准确度很高 (95%+),但测试准确度很低 (55%)。

该数据集是流行的 Dogs vs. Cats 数据集 (https://www.kaggle.com/c/dogs-vs-cats/data) 的子集,由我制作,将 15k 图像分为 3 个文件夹:train、valid 和 test,比例为 60:20:20 (猫夹、狗夹各减半9000、3000、3000)。

我的错误实际上是在我的代码中。它与模型或数据无关。该模型已在一个函数中定义,并且在评估期间创建了一个未经训练的实例。因此,一个未经训练的模型正在测试数据集上进行测试。纠正笔记本中的错误后,我的测试准确率达到了 96% 以上。

链接:

https://colab.research.google.com/drive/1-PO1KJYvXdNC8LbvrdL70oG6QbHg_N-e?usp=sharing&fbclid=IwAR2k9ZCXvX_y_UNWpl4ljs1y0P3budKmlOggVrw6xI7ht0cgm03_VeoKVTI

https://drive.google.com/drive/u/3/folders/1h6jVHasLpbGLtu6Vsnpe1tyGCtR7bw_G?fbclid=IwAR3Xtsbm_EZA3TOebm5EfSvJjUmndHrWXm4Iet2fT3BjE6pPJmnqIwW8KWY 呵呵

其他可能的原因:

  • 一种可能性是测试集将具有不同的 分布比验证集(这可以排除在 加入所有数据,随机化,再次拆分训练, 测试,有效)。
  • 相互交换有效和测试,看看它是否有 效果(有时如果一组具有相对较难的示例)。
  • 如果训练在某种程度上过度拟合验证集(是 可能在训练期间,在一个或多个步骤中,选择了在验证集上给出最佳分数的模型。
  • 图像重叠,缺乏洗牌。
  • 在深度学习世界中,如果有些事情看起来太奇怪了 真的,甚至好得令人难以置信,一个很好的猜测是它的 除非另有证明,否则可能是一个错误!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    相关资源
    最近更新 更多