【问题标题】:How implement Batch Norm with SWA in Tensorflow?如何在 Tensorflow 中使用 SWA 实现 Batch Norm?
【发布时间】:2021-05-03 03:49:35
【问题描述】:

我在 Tensorflow 2.2 中使用带有批量标准化层的随机权重平均 (SWA)。对于批量标准,我使用tf.keras.layers.BatchNormalization。对于 SWA,我使用自己的代码来平均权重(我在出现 tfa.optimizers.SWA 之前编写了代码)。我在多个来源中读到,如果使用批量规范和 SWA,我们必须运行前向传递以使某些数据(激活权重和/或动量值的运行平均值和标准偏差?)可用于批量规范层。我不明白 - 尽管阅读了很多 - 正是需要做什么以及如何做。具体来说:

  1. 什么时候必须运行前向/预测通道?在每个结束时 mini-batch,每个 epoch 结束,所有训练结束?
  2. 运行前向传递时,运行均值和标准差值如何可用 到批量规范层?
  3. 这个过程是由tfa.optimizers.SWA 类神奇地执行的吗?

【问题讨论】:

    标签: python tensorflow neural-network batch-normalization


    【解决方案1】:

    什么时候必须运行前向/预测通道?在每个结束时 mini-batch,每个 epoch 结束,所有训练结束?

    训练结束时。可以这样想,SWA 是通过将最终权重与运行平均值交换来执行的。但是所有的批范数层仍然是根据旧权重的统计数据计算的。所以我们需要向前传球让他们追上来。

    运行前向传递时,运行均值和标准差值如何 可用于批处理规范层?

    在正常的前向传递(预测)期间,不会更新运行平均值和标准差。所以我们真正需要做的是训练网络,而不是更新权重。这就是论文所说的以“训练模式”运行前向传递时所指的内容。

    实现这一点的最简单方法(据我所知)是重置批量归一化层并训练一个额外的 epoch,并将学习率设置为 0。

    这个过程是由 tfa.optimizers.SWA 类神奇地执行的吗?

    我不知道。但是,如果您使用的是 Tensorflow Keras,那么我已经制作了这个 Keras SWA callback,它就像在论文中一样,包括学习率时间表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      • 1970-01-01
      • 2016-01-02
      • 2019-02-22
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多