8

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

4

1 回答 1

10

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

从以下文档nn.BatchNorm2d

BatchNorm 公式

均值和标准差是在小批量上按维度计算的,γ 和 β 是大小为 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不使用任何参数,也不需要通道数,但仍然需要它们,以便有一个一致的界面。

于 2020-05-27T12:04:11.517 回答