我有20000张RGB图片。我设置了batch_Size = 1
(由于GPU的容量)。那么,这是否意味着模型权重会随着每张图片的变化而变化呢,还是取决于steps_per_epoch
呢?
我应该如何设置steps_per_epoch
和epoch,以便使用所有20000张图像在不同的epoch中参与训练?
让我们先澄清一些概念:
每个<<ul>批大小和每个epoch的步骤与上述概念有何关系?
batch_size
:确定每次迭代的样本数量(更新权重)。最小批大小为1(称为随机梯度下降),最大值可以是所有样本的数量(更多-阅读repeat()
在这里)。最大批处理大小的另一个限制是适合可用的GPU内存,正如你在问题中所说的。将batch_size
设置为较低的数字会使迭代更快,但损耗减少会使振荡更大。steps_per_epoch
:为了考虑一个epoch的迭代次数已完成。如果你有一个固定大小的训练集,你可以忽略它,但如果你有一个巨大的数据集,或者如果你正在动态地生成数据增强,也就是说,如果你的训练集有一个(生成的)无限大小的repeat()
函数,它可能是有用的。如果你有时间浏览整个训练数据集,你可以跳过这个参数。
是的,权重在每批后更新。steps_per_epoch
应该是数据点的数量(在您的例子中是20000)除以批大小。因此,如果批处理大小为1,steps_per_epoch
也将为20000。