步数为小数时是否向下舍入?

问题描述 投票:0回答:1

我已经开始尝试训练机器学习模型,并在训练过程中遇到了一些关于纪元和步骤概念的困惑。在网上研究时,我遇到了一个与时期、步骤和批量大小相关的公式 (𝜎 = (𝜀 × 𝜂) ÷ 𝛽)。将此公式应用于我自己的数据集产生了一小部分步骤,这对我提出了关于在实践中通常如何处理步骤的问题。我不确定小数步骤是否向下舍入或这如何准确地转化为实际的训练过程。我缺乏实施训练循环的实践经验,因此很难直观地掌握这些概念如何映射到现实世界的模型训练场景。

为了更好地理解 epoch、步数和批量大小之间的关系,我尝试将我找到的公式 (𝜎 = (𝜀 × 𝜂) ÷ 𝛽) 应用于数据集(这只是一个理论示例数据集):

total_samples = 10000  # Total number of samples in my dataset
batch_size = 32        # Batch size I plan to use
epochs = 10            # Number of epochs I want to train for

steps_per_epoch = total_samples / batch_size
total_steps = (epochs * total_samples) / batch_size

print(f"Steps per epoch: {steps_per_epoch}")
print(f"Total steps: {total_steps}")

这产生了以下输出:

Steps per epoch: 312.5
Total steps: 3125.0

每个时期的步数分数结果 (312.5) 让我不确定这将如何在真正的训练循环中实现。具体来说:

  1. 实践中小数步数通常会向下舍入吗?
  2. 如果发生舍入,这是否意味着每个时期可能会跳过一些数据样本?
  3. 常见的机器学习框架如何处理这种情况?

我还没有真正实现训练循环,所以我不确定这些分数步骤将如何在代码中处理。我的主要困难是弥合理论计算与其在模型训练中的实际应用之间的差距。

tensorflow machine-learning deep-learning
1个回答
0
投票

如果发生舍入,这是否意味着每个时期可能会跳过一些数据样本?

小数步仅意味着一个纪元最后一步中的示例集小于批量大小。

  • 向下舍入步长意味着忽略最后一组示例。如果批量大小相对于数据集大小而言较小并且每个时期的数据都被打乱,那么这可能有点好。
  • 舍入步长意味着在 epoch 结束时使用较小的批次进行训练。这可能会导致大规模机器学习系统中的一些基础设施组件失去平衡,并使我们的分析变得复杂(因为现在没有对所有批次精确地使用相同的批次大小)。

实践中小数步数通常会向下舍入吗? 常见的机器学习框架如何处理这种情况?

让我们看看 Pytorch 如何处理这个问题。在 Pytorch 中,我们通常通过数据加载器加载数据。它有一个名为

drop_last
的参数,其目的正是指定是向下舍入还是向上舍入。默认情况下,它设置为
False
,这意味着向上舍入。这也可能是您实施的一个很好的参考点。

© www.soinside.com 2019 - 2024. All rights reserved.