Tensorflow分配tf.contrib.layers.batch_norm的moving_variance和moving_average

时间:2017-12-10 12:16:51

标签: tensorflow batch-normalization

我有一个CNN模型,里面有一些批量规范化层。 batchnorm层由tf.contrib.layers.batch_norm构成。这种模式在基本情况下运作良好。但问题是我不知道如何分配moving_variancemoving_mean

详细信息,正如officail website所述,批量规范图层有variance mean scale offset四个参数。最后两个是张量流变量,我可以很好地处理。对于最后两个,即使我可以使用tf.get_collection(tf.GraphKeys.UPDATE_OPS))来获取它们,它们也是两个我不知道如何分配它们的张量。在大多数情况下,这两个参数是在训练阶段设置的。

我也试过tf.get_collection(tf.GraphKeys.VARIABLES),我可以得到两个名为tf.Variable 'BatchNorm/moving_meantf.Variable BachNorm/moving_Variance的张量流变量,但我可以用tf.assign更改这两个变量的值,但奇怪的是batchNorm的输出没有相应的改变

感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

来自Tensorflow官方网站: https://www.tensorflow.org/api_docs/python/tf/contrib/layers/batch_norm

  

注意:训练时,需要更新moving_mean和moving_variance。默认情况下,更新操作位于tf.GraphKeys.UPDATE_OPS中,因此需要将它们作为依赖项添加到train_op。例如:

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss)