首页 > 解决方案 > 为什么 max_batches 与数据集的大小无关?

问题描述

我想知道为什么图像的数量对训练时的迭代次数没有影响。这是一个让我的问题更清楚的例子:假设我们有 6400 张图像用于训练以识别 4 个类。根据 AlexeyAB 的解释,我们保持 batch= 64,subdivisions = 16 并写 max_batches = 8000,因为 max_batches 由#classes x 2000 决定。

由于我们有 6400 张图像,一个完整的 epoch 需要 100 次迭代。因此,此训练在 80 个 epoch 后结束。现在,假设我们有 12800 张图像。在这种情况下,一个 epoch 需要 200 次迭代。因此训练在 40 个 epoch 后结束。由于一个时期是指整个训练数据集的一个周期,我想知道为什么我们在数据集增加时不增加迭代次数,以保持时期数不变。

换句话说,我要求一个简单的解释,为什么 epoch 的数量似乎与训练的质量无关。我觉得这是 Yolo 构造的结果,但我知识渊博,无法理解。

标签: machine-learningyolodarknet

解决方案


为什么训练时图像的数量对迭代次数没有影响?

  • 在darknet yolo中,迭代次数取决于文件中的max_batches参数.cfg。运行后max_batches,暗网保存final_weights.

在每个 epoch 中,所有数据样本都通过网络传递,因此如果您有很多图像,则一个 epoch(和迭代)的训练时间会更长,您可以通过增加数据中的图像来测试它。

细分占小批量的数量。假设您的数据集中有 100 张图像。您的批量大小为 10,细分为 2,max_batches 为 20。

因此,在每次迭代中,10 张图像分两个 mini-batch(每个有 5 个样本)传递给网络,一旦你完成了 20 个 baches(20*10 数据样本),训练就完成了。(细节可能有点不同,我使用的是原作者稍微修改过的暗网pjreddie


推荐阅读