训练集大小和训练时期之间的关系
Posted
技术标签:
【中文标题】训练集大小和训练时期之间的关系【英文标题】:Relationship Between Training Set Size and Training Epochs 【发布时间】:2017-08-18 14:07:45 【问题描述】:我目前正在 Cifar10 数据集上训练一个抽搐网络。假设我有 50,000 张训练图像和 5,000 张验证图像。
要开始测试我的模型,假设我从 10,000 张图像开始,以了解模型的成功程度。
经过 40 个 epoch 的训练和 128 的批量大小 - 即每个 epoch 我都运行我的优化器,以在一批 128 张图像 (SGD) 上将损失最小化 10,000 / 128 ~ 78 次。
现在,假设我找到了一个在验证集上达到 70% 准确率的模型。满意后,我继续训练完整的训练集。
这一次,对于每个 epoch,我都会运行优化器以将损失最小化 5 * 10,000 / 128 ~ 391 次。
这让我觉得我在每个 epoch 的准确率应该高于 10,000 的有限集合。令我沮丧的是,有限训练集的准确度提高得更快。在完整训练集的 40 个 epoch 结束时,我的准确率为 30%。
考虑到数据可能已损坏,我对训练图像 10-20k、20-30k、30-40k 和 40-50k 执行了有限的运行。令人惊讶的是,这些运行中的每一次都产生了约 70% 的准确度,接近于 0-10k 图像的准确度。
由此产生两个问题:
-
为什么当数据集更大并且我已经确认每个数据段确实可以单独提供不错的结果时,验证准确度会下降?
对于更大的训练集,我是否需要训练更多的 epoch,即使每个 epoch 代表更多的训练步骤(391 对 78)?
【问题讨论】:
您是否在将数据输入网络之前对其进行了洗牌?如果您使用批次,样本总是属于同一类,SGD 很难收敛。 @ThomasPinetz 是的,我做到了。 【参考方案1】:事实证明我的直觉是对的,但我的代码却不是。
基本上,我一直使用训练数据(用于训练模型的数据)而不是验证数据(模型尚未看到的数据)来验证准确性。
在纠正这个错误后,验证准确度确实不可避免地随着更大的训练数据集而提高,正如预期的那样。
【讨论】:
以上是关于训练集大小和训练时期之间的关系的主要内容,如果未能解决你的问题,请参考以下文章
Keras:训练和验证集上的 model.evaluate() 与上次训练时期后的 acc 和 val_acc 不同
如何将 Tensorflow 数据集 API 与训练和验证集一起使用