The*_*eni 6 machine-learning deep-learning pytorch batch-normalization batchnorm
为什么我需要将先前的通道数传递给 batchnorm?batchnorm 应该对批处理中的每个数据点进行归一化,为什么它需要有通道数呢?
批量归一化具有可学习的参数,因为它包括仿射变换。
从文档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])
Run Code Online (Sandbox Code Playgroud)
注意:设置affine=False
不使用任何参数,也不需要通道数,但它们仍然是必需的,以具有一致的界面。