代码之家  ›  专栏  ›  技术社区  ›  hamster on wheels

循环训练中缺少一批?

  •  1
  • hamster on wheels  · 技术社区  · 7 年前
    • 数据已经更新 n_rows
    • 批量大小为 batch_size

    code 使用:

    n_batches = int(n_rows / batch_size)
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   abcdaire    7 年前

    事实上,您可以在一些代码中看到这一点,我们知道标记的数据非常有价值,所以您不想丢失一些宝贵的标记示例。乍一看,它看起来像一个bug,似乎我们正在丢失一些训练示例,但我们必须仔细查看代码。

    一般来说,当你在每个历元看到它时,就像你发送的代码一样(基于一个历元看到的事实) n_batches = int(n_rows / batch_size) 示例),数据为 每过一个时代就洗牌一次 . 因此,经过一段时间(几个时代之后),你会看到 全部的

    小结论:如果您看到了这一点,请确保数据在每个历元都被洗牌,否则您的网络可能永远看不到一些训练示例。

    : 训练步骤 批量大小 示例,并且您不会使用少量的培训示例执行培训循环。

    它更严格 当前位置假设您只剩下一个示例,并且您没有洗牌。在每个时期,假设您的损失是该批次的平均损失,对于最后一个示例,它将相当于重复一个由一个元素组成的批次 batch_size

    statexchange post

    我还要在文章中补充一点,如果您使用诸如批处理规范化之类的机制,最好在培训期间保持恒定的批处理大小,例如,如果 n_rows % batch_size = 1 ,将单个示例作为批传递 训练期间 会制造一些麻烦。

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