【发布时间】:2020-09-14 09:53:20
【问题描述】:
为什么我需要将之前的通道数传递给 batchnorm? batchnorm 应该对批处理中的每个数据点进行归一化,那为什么还需要通道数呢?
【问题讨论】:
标签: machine-learning deep-learning pytorch batch-normalization batchnorm
为什么我需要将之前的通道数传递给 batchnorm? batchnorm 应该对批处理中的每个数据点进行归一化,那为什么还需要通道数呢?
【问题讨论】:
标签: machine-learning deep-learning pytorch batch-normalization 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])
注意:设置affine=False不使用任何参数,也不需要通道数,但仍然需要它们,以便有一个一致的界面。
【讨论】: