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的旧帖子