2

tf.layers.batch_normalization文档说它将在未来的版本中删除,并且应该被tf.keras.layers.BatchNormalization替换,但是我找不到使用 tensorflow 低级 api 替换功能的方法。

import tensorflow as tf
bn = tf.layers.batch_normalization(tf.constant([0.0]), training=True)
print(tf.get_collection(tf.GraphKeys.UPDATE_OPS))

输出:

[<tf.Operation 'batch_normalization/AssignMovingAvg' type=AssignSub>,
<tf.Operation 'batch_normalization/AssignMovingAvg_1' type=AssignSub>]

如果我们按照文档中的建议使用 keras

bn = tf.keras.layers.BatchNormalization(axis=-1)(tf.constant([0.0]), training=True)

我们得到一个空输出:

[]

由于 UPDATE_OPS 为空,因此模型无法在使用 keras 进行训练期间更新批归一化moving_avg_mean 和moving_avg_variance(导致更高的测试误差)。非常感谢任何如何解决这个问题的建议!

上面的例子取自一篇关于如何使用tf.layers.batch_normalization的旧帖子

4

0 回答 0