1

我有一个 CNN 模型,其中包含一些批量标准化层。batchnorm 层由tf.contrib.layers.batch_norm. 该模型在基本情况下运行良好。但一个问题是我不知道如何分配它的moving_variancemoving_mean

详细地说,正如官方网站描述的那样,批量规范层有variance mean scale offset四个参数。最后两个是张量流变量,我可以很好地解决。对于最后两个,即使我可以得到它们tf.get_collection(tf.GraphKeys.UPDATE_OPS)),它们是两个张量,我不知道如何分配它们。在大多数情况下,这两个参数是在训练阶段设置的。

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

感谢您的任何建议!

4

1 回答 1

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)
于 2017-12-10T21:22:48.090 回答