python - for 循环训练中缺少一批?

标签 python tensorflow

  • 数据有 n_rows
  • 批量大小为batch_size

我看到一些code用途:

n_batches = int(n_rows / batch_size)

如果 n_rows 不是批量大小的倍数怎么办? n_batches 仍然正确吗?

最佳答案

事实上,您可以在几个代码中看到这一点,并且我们知道标记数据非常有值(value),因此您不想丢失一些珍贵的标记示例。乍一看,它看起来像一个错误,而且我们似乎丢失了一些训练示例,但我们必须仔细查看代码。

一般来说,当您在每个时期(基于一个时期看到 n_batches = int(n_rows/batch_size) 示例这一事实)看到这一点时,就像您发送的代码中一样,数据在每个时期后都会进行洗牌。因此,随着时间的推移(几个时期之后),您将看到所有训练示例。我们不会丢失任何示例\o/

小结论:如果您看到这一点,请确保在每个时期对数据进行混洗,否则您的网络可能永远不会看到一些训练示例。

这样做有什么好处?

效率很高: 通过使用此机制,您可以确保在每个训练步骤,您的网络都会看到batch_size示例,并且您不会使用少量训练示例执行训练循环。

更加严格:想象一下你还剩下一个例子,并且你不洗牌。在每个 epoch ,假设您的损失是批处理的平均损失,对于最后一个示例,它将相当于由一个重复 batch_size 时间的元素组成的批处理,就像对这个示例进行加权一样具有更重要的意义。如果您进行洗牌,这种效果将会减少(因为剩余的示例会随着时间的推移而改变),但在训练时期保持恒定的批量大小会更加严格。

在训练期间打乱数据还有一些优点,请参阅: statexchange post

我还会在帖子中补充一点,如果您使用批量归一化等机制,最好在训练期间保持恒定的批量大小,例如,如果 n_rows % batch_size = 1在训练期间将单个示例作为批处理传递可能会造成一些麻烦。

注意: 我谈论的是训练时期内的恒定批量大小,而不是整个训练周期(多个时期),因为即使通常情况如此(在整个训练过程中保持恒定),您也可以找到一些研究工作来修改训练期间批处理的大小,例如Don't Decay the Learning Rate, Increase the Batch Size .

关于python - for 循环训练中缺少一批?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299525/

相关文章:

python - 读取 float32 中的二进制数据

python - Tensorflow安装成功但不工作

python3 TensorFlow 检查失败 : new_num_elements == NumElements() (96 vs. 60000)

python - 从 PyArrow 写入 Parquet 文件时如何指定逻辑类型?

python - 我如何在 pymongo 中填充?

php仅将数组中的变量返回到网页中

python - 如何在 Tensorflow 中使用指数移动平均线

python - 在 python 中使用 glob 不会返回最新的文件路径

python - 如何使用带参数的任务计划程序运行 python 脚本

python - 在 Tensorflow 中使用您自己的数据