Как рассчитать пакетную нормализацию с помощью Python?

Когда я внедряю пакетную нормализацию в python с нуля, я сбиваюсь с толку. См. документ, в котором приведены некоторые цифры о методах нормализации, я думаю, что это может быть неверно. Описание и рисунок неверны.

Описание из статьи:

введите описание изображения здесь

Рисунок из статьи: исходная фигура BNНасколько я понимаю В связи с этим, представление пакетной нормализации в исходной статье неверно. Я размещаю здесь вопрос для обсуждения. Я думаю, что пакетная нормализация должна быть такой, как на следующем рисунке.

BN

Ключевым моментом является расчет среднего и стандартного значений. С формой карты объектов как (batch_size, channel_number, width, height), mean = X.mean(axis=(0, 2, 3), keepdims=True) или mean = X.mean(axis=(0, 1), keepdims=True)

Который правильный?


person Jingnan Jia    schedule 08.01.2020    source источник


Ответы (1)


Вы должны рассчитать среднее и стандартное значение для всех пикселей в изображениях партии. Поэтому используйте параметры axis = (0, 2, 3). Если каналы имеют примерно одинаковое распределение - вы также можете рассчитать среднее и стандартное значение по каналам. поэтому просто используйте mean () и std () без параметра осей.

Цифра в статье верна - для каждой партии берется среднее значение и стандартное значение по H и W (размеры изображения). Очевидно, что канал не отображается в 3-м кубе.

person Poe Dator    schedule 08.01.2020
comment
Спасибо. Не могли бы вы также увидеть здесь более подробную информацию по этому вопросу? Надеюсь снова услышать твой ответ. - person Jingnan Jia; 09.01.2020
comment
Среднее значение и стандартное значение для пакета изображений должны быть одним числом (или 3 числами, если вы выбрали это для каждого канала). Затем вы вычитаете это среднее значение из каждого значения пикселя и затем делите каждое значение пикселя на стандартное. Запустите этот алгоритм и убедитесь, что он работает. - person Poe Dator; 09.01.2020
comment
Спасибо, это работает. Что меня смущает, так это то, почему некоторые люди думают, что batch_size = 1 приведет к делению на ноль? - person Jingnan Jia; 09.01.2020
comment
Те, кто думают, что batch_size = 1 приведет к делению на ноль, предполагают, что std рассчитывается отдельно для каждого пикселя. Но даже для batch_size = 1 он рассчитывается для пикселей H * W. пожалуйста, примите ответ. - person Poe Dator; 09.01.2020
comment
Большое спасибо за ответ! Люблю тебя! - person Jingnan Jia; 09.01.2020