以下代码(可复制/粘贴并运行)演示了如何使用
使用TF 1.5,文档(如下所述)明确指出,在这种情况下UPDATE_OPS不应为空(https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization):
注:训练时需要更新moving_mean和moving_variance。默认情况下,更新操作被放置在tf.GraphKeys.UPDATE_OPS中,因此它们需要作为train_op的依赖项添加。例如:
tf.layers.batch_normalization
。import tensorflow as tf
bn = tf.layers.batch_normalization(tf.constant([0.0]))
print(tf.get_collection(tf.GraphKeys.UPDATE_OPS))
> [] # UPDATE_OPS collection is empty
使用TF 1.5,文档(如下所述)明确指出,在这种情况下UPDATE_OPS不应为空(https://www.tensorflow.org/api_docs/python/tf/layers/batch_normalization):
注:训练时需要更新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)
trainable=True
而不是training=True
,如果其他人犯同样的错误,这是一个坑。 - David Parkstraining
是一个张量变量,那么它不会按预期工作。如果training
为false,则tf.GraphKeys.UPDATE_OPS
仍将返回所有批量归一化更新操作。 - Spenhouet