为什么tf.trainable_variables()中没有moving_mean和moving_variance?

时间:2019-03-23 05:35:36

标签: python tensorflow

我正在使用tf.layers.batch_normalization(a_pl, training=True)。 通过tf.trainable_variables(),我可以看到所有可训练的变量。但是我在其中找不到moving_meanmoving_variances

代码如下:

import tensorflow as tf
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
a_pl = tf.placeholder(tf.float32, [2, 3])
b = tf.layers.batch_normalization(a_pl, training=True)
vl = [var.name for var in tf.trainable_variables()]
for v in vl:
    print v

这里的输出:

batch_normalization/gamma:0
batch_normalization/beta:0

我想知道moving_mean中为什么不包括moving_variancestf.trainable_variables()吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

可训练变量使用梯度下降来训练。批次归一化移动平均值和方差不是使用梯度下降来训练的,而是直接根据通过网络进行的激活计算得出的,因此不应将它们作为可训练变量包括在内。

因此,从某种意义上讲,您可以说它们是自动训练的,但不是梯度下降的,因此它们在这种意义上不是可训练的变量。