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

时间:2019-02-09 18:33:34

标签: python tensorflow

在tensorflow中,有一个众所周知的批处理规范化,它将权重更新操作添加到tf.GraphKeys.UPDATE_OPS。但是在实例规范化的情况下,不添加任何更新操作。使用tf.contrib.layer.batch_norm时,我可以指定is_training参数,该参数将update op添加到集合中。 但是对于tf.contrib.layer.instance_normtf.contrib.layer.group_norm来说,没有这样的参数,也没有将op添加到tf.GraphKeys.UPDATE_OPS中。

这是正确的行为,还是张量流中的错误?实例规范化中的更新操作如何工作?

1 个答案:

答案 0 :(得分:1)

您应该了解为什么batch_norm需要在UPDATE_OPS中添加操作。

tf.layers.batch_normalization函数将生成四个变量,即gammabetamoving_meanmoving_variance,而只有gamma,{{1 }}位于beta中。

在训练阶段,tf.GraphKeys.TRAINABLE_VARIABLESmoving_mean也需要更新,因此如果我们将moving_variance的{​​{1}}参数设置为1,则该函数会将相应的操作添加到training中以更新tf.layers.batch_normalizationtf.GraphKeys.UPDATE_OPS,而如果我们将moving_mean的{​​{1}}参数设置为0,则该函数将不会执行任何操作moving_variance,因为它不需要在测试阶段更新trainingtf.layers.batch_normalization

对于tf.GraphKeys.UPDATE_OPSmoving_mean,它们仅具有moving_variance中的group_norminstance_norm变量,因此存在无需在beta中添加任何操作。

相关问题