Batchnorm2d Pytorch - 为什么要将通道数传递给 batchnorm?

Batchnorm2d Pytorch - Why pass number of channels to batchnorm?

为什么我需要将之前的通道数传递给batchnorm? batchnorm 应该对批次中的每个数据点进行归一化,为什么它需要有通道数?

批量归一化具有可学习的参数,因为它包含仿射变换。

来自 nn.BatchNorm2d 的文档:

The mean and standard-deviation are calculated per-dimension over the mini-batches and γ and β are learnable parameter vectors of size C (where C is the input size). By default, the elements of γ are set to 1 and the elements of β are set to 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不使用任何参数,也不需要通道数,但它们仍然是必需的,以便有一个一致的接口。