gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 08:25:14 24 4
gpt4 key购买 nike

  • 数据有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com