代码之家  ›  专栏  ›  技术社区  ›  Matěj Račinský

实例规范化和组规范化缺少更新

  •  0
  • Matěj Račinský  · 技术社区  · 7 年前

    在TensorFlow中,有众所周知的批处理规范化,它将权重更新操作添加到 tf.GraphKeys.UPDATE_OPS . 但在实例规范化的情况下,没有添加更新操作。使用时 tf.contrib.layer.batch_norm ,我可以指定 is_training 将更新操作添加到集合的参数。 但为了 tf.contrib.layer.instance_norm tf.contrib.layer.group_norm 没有这样的参数,也没有OP添加到 tf.graphkeys.update_操作 .

    这是正确的行为,还是TensorFlow中的错误?那么,实例规范化中的更新操作是如何工作的呢?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Panfeng Li    7 年前

    你应该明白为什么 batch_norm 需要在中添加操作 UPDATE_OPS .

    tf.layers.batch_normalization 函数将生成四个变量,即 gamma , beta , moving_mean moving_variance 只有 伽马 , 贝塔 tf.GraphKeys.TRAINABLE_VARIABLES .

    在培训阶段, 移动平均数 移动方差 也需要更新,这样如果我们设置 training 参数为1 tf.layers.batch_规范化 ,函数将相应的ops添加到 tf.GraphKeys.UPDATE_OPS 用于更新 移动平均数 移动方差 ,而如果我们设置 训练 参数为0 tf.layers.batch_规范化 ,函数不会对 tf.graphkeys.update_操作 ,因为它不需要更新 移动平均数 移动方差 在测试阶段。

    至于 group_norm instance_norm ,他们只有 贝塔 伽马 变量,已经在 tf.graphkeys.trainable_变量 ,这样就不需要在 tf.graphkeys.update_操作 .