我有一个图像数据集,它由 113695 张用于训练的图像和 28424 张用于验证的图像组成。现在,当我使用ImageDataGeneratorand时flow_from_dataframe,它作为参数batch_size。
batch_size由于两个数字不能除以相同的数字,我该如何取正确的数字?我是否需要在验证数据中删除四个图像以使它们变为batch_size5 个?还是有其他方法?
我有一个图像数据集,它由 113695 张用于训练的图像和 28424 张用于验证的图像组成。现在,当我使用ImageDataGeneratorand时flow_from_dataframe,它作为参数batch_size。
batch_size由于两个数字不能除以相同的数字,我该如何取正确的数字?我是否需要在验证数据中删除四个图像以使它们变为batch_size5 个?还是有其他方法?
这个交叉验证的帖子可能会回答你的问题。
简而言之:
单个批次(即一个批次中的所有数据)将在损失表面上产生平滑的轨迹。缺点是您的所有数据可能不适合您的内存。这很可能是约 100k 图像。
每批次一张图像(批次大小 = 示例数)将导致更加随机的轨迹,因为梯度是在单个示例上计算的。优点是具有计算性质和更快的训练时间。
中间方法是选择批次大小,使批次适合内存并且梯度表现得不那么“嘈杂”。老实说,没有“黄金”数字,我个人喜欢选择 2 的幂。
不要担心您的数据不能被批量大小整除。图书馆会在内部处理这个问题,最后一批将比定义的批大小小()。
来自 Coursera 上的 Andrew 课程,batch_size应该是 2 的幂,例如:512、1024、2048。训练速度会更快。
例如,您不需要将最后一张图片拖放到batch_size5 张。该库喜欢 Tensorflow 或 Pytorch,最后一个batch_size是number_training_images % 55 是你的batch_size.
最后但并非最不重要的一点是,batch_size 需要适合您的内存训练(CPU 或 GPU)。你可以尝试几个大的batch_size来知道哪个值没有内存不足。越小number_mini_batch = number_training_image//batch_size + 1,训练时间越快。
希望他们能帮助你!