【问题标题】:Is it possible to disable running average calculation in tf.layers.batch_normalization?是否可以在 tf.layers.batch_normalization 中禁用运行平均值计算?
【发布时间】:2020-04-17 14:34:13
【问题描述】:

是否可以在tf.layers.batch_normalization 中禁用运行平均值计算?即,我希望 BN 在训练和测试中同样工作,只估计输入张量的统计数据。

根据这个方程,动量 = 1.0 是否足以满足这种行为?

x_new_est = (1-momentum) * x_est + momentum * (x_t)

或/和在训练和推理中设置 training=True 就足够了?

训练:Python 布尔值或 TensorFlow 布尔标量 张量(例如占位符)。是否返回训练中的输出 模式(使用当前批次的统计数据标准化)或推理 模式(使用移动统计标准化)。注意:确保设置这个 参数正确,否则您的训练/推理将无法正常工作 正确。

似乎这在 PyTorch 中是可能的 https://pytorch.org/docs/stable/nn.html#torch.nn.BatchNorm2d

如果 track_running_stats 设置为 False,则该层不保留 运行估计,并在期间使用批处理统计信息 评估时间。

【问题讨论】:

    标签: python tensorflow pytorch batch-normalization


    【解决方案1】:

    Yes:tf.layers.batch_normalization(..., training=True).

    Same dealtf.keras.layers.batch_normalization

    请注意,在永久固定 training=True 的情况下,您可以设置 trainable=False 以稍微加快速度,因为它仅指更新正在运行的 EMA 统计信息(推理模式)。另请注意,training=True 中的推理将呈现依赖于批次样本的预测 - 即,如果您要在同一批次中更改 一些 个样本,您将获得对 all 的不同预测em> 样本。

    最后,不,momentum=1不等同于在训练模式下使用 BN,因为它所做的只是修复 running_mean=0running_var=1,因此 BN 的输入将进行身份转换: (inputs - 0) / 1 - 而在训练模式下,inputs 根据inputs 的统计数据进行缩放以获得零均值和单位方差。如果trainable=True,那么经过训练的gammabeta 将在之后应用线性变换。 traininginference BN 输入处理参见 Keras 等效源代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2018-04-03
      相关资源
      最近更新 更多