【发布时间】:2019-04-16 12:27:05
【问题描述】:
据我了解,对于tf.layers.batch_normalization,我定义的轴是标准化的轴。
简单地说:
给定这些值
a = [[0, 2],
[1, 4]]
形状为 (2, 2),因此轴 0 和 1。
对轴 1 进行归一化意味着将轴 0 减少到其平均值和标准差,然后将这些值用于归一化。
因此
bn = tf.layers.batch_normalization(a, axis=[1])
会有(几乎)相同的结果
m, v = tf.nn.moments(a, axes=[0])
bn = (a - m) / tf.sqrt(v)
但是我将如何为所有轴执行tf.layers.batch_normalization?
使用之前的平均值和标准差计算会很容易:
m, v = tf.nn.moments(a, axes=[0, 1])
bn = (a - m) / tf.sqrt(v)
但是如何通过批量标准化来做到这一点?
bn = tf.layers.batch_normalization(a, axis=[???])
我尝试了以下不起作用:
-
axis = None:AttributeError: 'BatchNormalization' object has no attribute 'axis' -
axis = []:IndexError: list index out of range -
axis = [0, 1]:所有结果都为零
【问题讨论】:
-
这种批量标准化的用例/优势是什么?归一化不应该首先沿着特征轴吗?
-
@NihalSangeeth 您可以规范化您需要的每个轴。这一切都取决于您的数据的外观和它所代表的内容。是的,通常在特征轴上进行归一化,但这并不排除在任何其他维度上进行归一化。
标签: python tensorflow batch-normalization