Пакетная нормализация имеет обучаемые параметры, поскольку включает аффинное преобразование.
Из документации nn.BatchNorm2d
:
Среднее значение и стандартное отклонение рассчитываются для каждого измерения в мини-пакетах, а γ и β - это векторы параметров, которые можно обучать, размером 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
не использует никаких параметров, а количество каналов не потребуется, но они все равно необходимы, чтобы иметь согласованный интерфейс.