如何设置 batch_size、steps_per epoch 和验证步骤?

数据挖掘 机器学习 喀拉斯 美国有线电视新闻网 西阿诺
2021-10-01 20:19:18

我开始使用 Keras 学习 CNN。我正在使用 theano 后端。

我不明白如何将值设置为:

  • batch_size
  • steps_per_epoch
  • validation_steps

如果我在训练集中有 240,000 个样本,在测试集中有 80,000 个样本,那么设置为batch_sizesteps_per_epoch的值应该是多少?validation_steps

3个回答
  • batch_size确定每个小批量中的样本数。它的最大值是所有样本的数量,这使得梯度下降准确,如果学习率足够小,损失会向最小值减小,但迭代速度较慢。它的最小值为 1,导致随机梯度下降:快速但梯度步骤的方向仅基于一个示例,损失可能会跳跃。batch_size 允许在两个极端之间进行调整:准确的梯度方向和快速迭代。此外,如果您的模型 + 数据集不适合可用 (GPU) 内存,则可能会限制 batch_size 的最大值。
  • steps_per_epoch在一个训练时期被认为完成之前的批迭代次数。如果你有一个固定大小的训练集,你可以忽略它,但如果你有一个巨大的数据集或者你正在动态生成随机数据增强,即如果你的训练集具有(生成的)无限大小,它可能会很有用。如果您有时间浏览整个训练数据集,我建议您跳过此参数。
  • validation_steps类似于 steps_per_epoch 但在验证数据集上而不是在训练数据上。如果您有时间浏览整个验证数据集,我建议您跳过此参数。

Github里有答案

  1. model.fit_generator要求输入数据集生成器无限运行。
  2. steps_per_epochsteps_per_epoch用于通过调用生成器时间来生成整个数据集
  3. epochs给出模型在整个数据集上训练的次数。

来自 tensorflow_estimator/python/estimator/training.py

停止条件:

为了可靠地支持分布式和非分布式配置,模型训练唯一支持的停止条件是train_spec.max_steps. 如果train_spec.max_stepsNone,则模型将永远被训练。如果模型停止条件不同,请小心使用。例如,假设模型预计将使用一个 epoch 的训练数据进行训练,并且训练input_fn配置为在经过一个 epoch 后抛出 OutOfRangeErrorepoch这将停止 Estimator.train. 对于 3-training-worker 分布式配置,每个training-worker 很可能独立完成整个 epoch。因此,模型将使用三个 epoch 的训练数据而不是一个 epoch 进行训练。