我将数据集(约28,000张图像)分为75%的训练集和25%的测试集。然后,我从训练集中随机抽取了15%,从测试集中随机抽取了15%,创建了一个验证集。目标是将图像分类为两类。无法分享确切的图像样本,但与附件中的图像类似。我使用的是VGG19模型,采用ImageNet权重,最后两层可训练,并附加了4个密集层。我还使用ImageDataGenerator来增强图像。我训练了模型30个周期,发现训练准确率为95%,验证准确率为96%,但在测试数据集上的准确率大幅下降至仅75%。
我尝试了正则化和 dropout 来解决过拟合问题。我还做了一件事,看看如果我使用测试集作为验证集,并在同一测试集上测试模型会发生什么。结果是:训练集准确率 = 96%,验证准确率 = 96.3%,测试准确率 = 68%。我不知道该怎么办?
回答:
首先,您需要确保在数据分割时,每个新数据集中每个类别的相对大小是相等的。如果您的初始数据分布不平衡,那么这种不平衡在所有数据集分割后必须保持一致。
现在,关于数据分割。如果您需要训练集、验证集和测试集,它们必须是彼此独立的(不共享样本)。如果您不想欺骗自己所得到的结果,这一点非常重要。
一般来说,在机器学习中,我们从训练集和测试集开始。为了选择最佳的模型架构/超参数,我们进一步将训练集分成验证集(测试集不应被触动)。在确定模型的最佳架构/超参数后,我们将训练集和验证集合并,从头开始用合并的完整训练集训练最佳模型。现在我们才可以测试测试集上的结果。