размеры в пакетной нормализации

Я пытаюсь создать обобщенную функцию пакетной нормализации в Tensorflow.

Я узнаю о пакетной нормализации в этой очень доброй статье.

У меня проблема с размерами переменных scale и beta: в моем случае пакетная нормализация применяется к каждой активации каждого сверточного слоя, поэтому, если у меня as вывод сверточного слоя терсора размером:

[57,57,96]

мне нужно, чтобы масштаб и бета имели тот же размер, что и вывод сверточного слоя, верно?

вот моя функция, программа работает, но я не знаю, верна ли она

def batch_normalization_layer(batch):
   # Calculate batch mean and variance
    batch_mean, batch_var = tf.nn.moments(batch, axes=[0, 1, 2])

    # Apply the initial batch normalizing transform
    scale = tf.Variable(tf.ones([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]]))
    beta = tf.Variable(tf.zeros([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]]))

    normalized_batch = tf.nn.batch_normalization(batch, batch_mean, batch_var, beta, scale, 0.0001)

    return normalized_batch

person Alberto Merciai    schedule 14.04.2017    source источник


Ответы (1)


из документации tf.nn.batch_normalization:

Ожидается, что среднее значение, дисперсия, смещение и масштаб будут иметь одну из двух форм:

В общем, они могут иметь то же количество измерений, что и входной x, с такими же размерами, как x, для измерений, которые не нормализованы (измерение (-я) глубины), и размер 1 для других, которые нормализовано более. среднее значение и дисперсия в этом случае обычно будут выходными данными tf.nn.moments (..., keep_dims = True) во время обучения или их средними значениями во время логического вывода.

В общем случае, когда измерение «глубина» является последним измерением во входном тензоре x, они могут быть одномерными тензорами того же размера, что и измерение «глубины». Это имеет место, например, для обычного макета [пакет, глубина] для полностью связанных слоев и [пакет, высота, ширина, глубина] для сверток. среднее значение и дисперсия в этом случае обычно будут выходными данными tf.nn.moments (..., keep_dims = False) во время обучения или их средними значениями во время логического вывода.

С вашими значениями (масштаб = 1.0 и смещение = 0) вы также можете просто указать значение None.

person fabrizioM    schedule 14.04.2017