CNN中的大量时代是好主意还是坏主意

数据挖掘 深度学习 张量流
2021-10-08 08:46:39

在我的 CNN 模型中,通过使用 400 或以上的大量 epoch,验证准确度和有时测试准确度会变得更好,但我认为这么多 epoch 不是个好主意?我是对还是错?为什么?

3个回答

如果您的模型仍在改进(根据验证损失),那么更多的时期会更好。您可以通过使用保持测试集来比较模型检查点来确认这一点,例如在 epoch 100、200、400、500。

通常,改进量会随着时间的推移而减少(“收益递减”),因此通常在曲线非常平坦时停止,例如使用EarlyStopping回调。


不同的模型需要不同的训练时间,具体取决于它们的大小/架构和日期集。在ImageNet 数据集上训练的大型模型的一些示例(约 1,000,000 个标记图像,约 1000 个类别):


您需要的时期数将取决于模型的大小和数据集中的变化。

模型的大小可以粗略地代表它能够表达(或学习)的复杂性。因此,一个巨大的模型可以为具有更高数据多样性的数据集生成更细微的模型,但是可能需要更长的时间来训练,即更多的时期。

在训练时,我建议绘制训练和验证损失,并密切关注它们在不同时期的进展情况以及彼此之间的关系。您当然应该期望这两个值都会减小,但是一旦线条开始发散,您就需要停止训练——这意味着您对特定数据集的过度拟合

如果你训练一个大型 CNN 很多 epoch,这很可能会发生,并且图表可能看起来像这样:

过拟合

图片来源

假设您使用验证集跟踪性能,只要验证误差在减少,更多的 epoch 是有益的,模型正在改进可见(训练)和不可见(验证)数据。

一旦验证错误开始增加,就表明模型对训练数据过度拟合,因此应该停止学习过程。此方法独立于模型的细节。

在实践中,保存与目前找到的最佳验证误差对应的模型,并仅在验证误差持续增加时停止该过程。这可以手动完成,也可以使用基于当前验证错误与迄今为止最小错误的距离的临时阈值来完成。这样,学习就不会由于验证误差的波动而过早停止。

这取决于…

较小的批大小将提高评估指标(例如准确性)的性能,因为模型将对参数进行更频繁的更新。

较大的批量大小将增加吞吐量(例如,每秒处理的图像数量)。

这种权衡通常看起来像是评估指标的小幅下降,而吞吐量则大幅增加,以增加批量大小。因此,如果评估指标的绝对性能是唯一标准,请使用小批量并花费较长的训练时间。如果评估指标下降是可以的,您可以通过增加批量大小来大大加快训练速度。例如,许多应用模型可以用 2048 的批大小进行训练。

总体而言,最好选择 32(32、64、256、2048)的幂,以最大限度地提高数据加载速度。32 的最佳功率通常取决于模型训练的硬件架构。

对不同批次大小的模型性能(评估指标和训练时间)进行经验基准测试是一个好主意。