在庞大的数据集上训练 CNN

数据挖掘 深度学习 分类 美国有线电视新闻网 图像分类
2022-02-17 15:57:58

我正在尝试在RVL-CDIP Dataset上训练 AlexNet 图像模型。该数据集由 320,000 张训练图像、40,000 张验证图像和 40,000 张测试图像组成。

由于数据集很大,我开始对训练集中的 500 个(每类)样本进行训练。结果如下:训练 500 个(每班)样本,32 个批次,40 个 epoch

从上图中我们可以看出,在 epoch 20 左右,验证损失开始以更慢的速度下降,而训练损失继续以同样的速度下降。这意味着我们的模型开始过度拟合数据?我认为这可能是因为我在训练集中拥有的数据不足以在验证集上获得更好的结果?(验证数据也是来自整个验证集的 500 个(每类)样本)

在小样本(例如每类 500 张图像)上训练模型、保存模型、加载保存的模型权重然后用更大的样本(例如 1000 张图像)再次训练是正确的方法吗?我的直觉是,这样模型在每次新运行时都会有新数据,这有助于它了解更多关于验证集的信息。如果这种方法是正确的,那么在第二次用更大的样本训练模型时,训练样本是否应该包括在第一次模型中训练的图像(部分或全部)?

您可以在此处找到带有结果的完整代码

1个回答

它让我想起了这个问题,训练损失比验证损失下降得更快。我知道存在一些过度拟合,因为模型正在学习一些仅在训练集中的模式,但模型仍在学习一些更普遍的模式,因为验证损失也在减少。对我来说,如果验证损失增加,那将是一个更大的问题,但事实并非如此。

编辑

通常神经网络使用所有数据进行训练,使用小批量梯度下降进行训练已经完成了您在方法中提到的操作,而无需将模型存储在内存中。因此,我会使用尽可能多的数据进行训练,以建立一个方差最小的模型。如果您没有使用生成器提供数据并且整个数据集不适合内存,我建议使用它们,或者使用考虑到内存限制的尽可能大的模型进行训练。