我有一个CNN模型,里面有一些批量规范化层。 batchnorm层由tf.contrib.layers.batch_norm
构成。这种模式在基本情况下运作良好。但问题是我不知道如何分配moving_variance
和moving_mean
。
详细信息,正如officail website所述,批量规范图层有variance
mean
scale
offset
四个参数。最后两个是张量流变量,我可以很好地处理。对于最后两个,即使我可以使用tf.get_collection(tf.GraphKeys.UPDATE_OPS))
来获取它们,它们也是两个我不知道如何分配它们的张量。在大多数情况下,这两个参数是在训练阶段设置的。
我也试过tf.get_collection(tf.GraphKeys.VARIABLES)
,我可以得到两个名为tf.Variable 'BatchNorm/moving_mean
和tf.Variable BachNorm/moving_Variance
的张量流变量,但我可以用tf.assign
更改这两个变量的值,但奇怪的是batchNorm的输出没有相应的改变
感谢您的任何建议!
答案 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)