我已将数据集(约28K图像)分为75%的训练集和25%的测试集。然后,我随机抽取了15%的训练集和随机15%的测试集来创建验证集。目标是将图像分为两类。无法共享确切的图像样本。但其与所附的相似。我正在使用这种模型:VGG19,其图像网络权重为最后两层可训练,并附加了4个密集层。我还使用ImageDataGenerator来增强图像。我对模型进行了30个时期的训练,发现训练准确度为95%,验证准确度为96%,而在测试数据集上进行训练时,其下降幅度仅为75%。
我尝试过正则化和辍学,以解决过度拟合的问题。我还做了另一件事,看看如果我将测试集用作验证集并在同一测试集上测试模型会发生什么。结果为:Trainset Acc = 96%,验证ACC = 96.3%,testAcc = 68%。我不知道该怎么办?
答案 0 :(得分:1)
首先,您需要确保在拆分数据时,新数据集中每个类的相对大小相等。如果这是您的初始数据的分布,则可能会不平衡,但拆分后所有数据集中的平衡都必须相同。
现在,关于拆分。如果您需要训练,验证和测试集,则它们必须彼此独立(无共享样本)。如果您不想欺骗自己获得的结果,这很重要。
通常,在机器学习中,我们从训练集和测试集开始。为了选择最佳的模型架构/超参数,我们将训练集进一步划分为验证集(不应触摸测试集)。 在确定了适用于我们模型的最佳架构/超参数之后,我们将训练和验证集结合在一起,并从头开始结合组合的完整训练集来训练最佳情况模型。直到现在,我们才能在测试集上测试结果。
答案 1 :(得分:-1)
我在我的一个练习项目中遇到过类似的问题。 我的 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% 以上的测试准确率。
链接:
其他可能的原因: