Batchnorm2d Pytorch - Зачем передавать количество каналов в batchnorm? - PullRequest
2 голосов
/ 27 мая 2020

Почему мне нужно передавать в батчнорм предыдущее количество каналов? Батчнорм должен нормализоваться по каждой точке данных в пакете, зачем тогда нужно количество каналов?

1 Ответ

2 голосов
/ 27 мая 2020

Пакетная нормализация имеет обучаемые параметры, поскольку включает аффинное преобразование.

Из документации nn.BatchNorm2d:

BatchNorm Formular

Среднее значение и стандартное отклонение рассчитываются для каждого измерения в мини-пакетах, а γ и β - это векторы параметров, которые можно обучать, размером C (где C - размер ввода). По умолчанию для элементов γ установлено значение 1, а для элементов β - 0.

Поскольку норма вычисляется для каждого канала, параметры γ и β являются векторами размером num_channels (один элемент на канал), что дает индивидуальный масштаб и сдвиг для каждого канала. Как и любой другой обучаемый параметр в PyTorch, они должны быть созданы с фиксированным размером, поэтому вам необходимо указать количество каналов

batch_norm = nn.BatchNorm2d(10)

# γ
batch_norm.weight.size()
# => torch.Size([10])

# β
batch_norm.bias.size()
# => torch.Size([10])

Примечание. Настройка affine=False не использует никаких параметров, а количество каналов не потребуется, но они все равно необходимы, чтобы иметь согласованный интерфейс.

...