Насколько я понимаю, для 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]
: все результаты равны нулю