InstanceNorm2d

classtorch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False, device=None, dtype=None)[源代码]

进行实例规范化。

此操作在4D输入(即具有附加通道维度的2D输入的小批量)上应用实例归一化,如论文实例归一化:快速风格化的缺失成分中所述。

y=xE[x]Var[x]+ϵγ+βy = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta

均值和标准差是为小批量中的每个对象分别按维度计算的。如果affineTrue,则γ\gammaβ\beta 是大小为C(其中C是输入大小)的可学习参数向量。标准差通过有偏估计器计算,等同于torch.var(input, unbiased=False)

默认情况下,该层在训练和评估模式中都会使用从输入数据计算得出的实例统计信息。

如果 track_running_stats 设置为 True,在训练过程中,该层会持续计算并保存均值和方差的运行估计值。这些估计值在评估阶段用于归一化处理,默认情况下使用 momentum 为 0.1。

注意

这个 momentum 参数与优化器类中使用的以及传统意义上的动量概念不同。数学上,这里的运行统计更新规则是x^new=(1momentum)×x^+momentum×xt\hat{x}_\text{new} = (1 - \text{momentum}) \times \hat{x} + \text{momentum} \times x_t,其中 x^\hat{x} 表示估计的统计量,xtx_t 是新的观测值。

注意

InstanceNorm2dLayerNorm 非常相似,但有一些细微的差别。具体来说,InstanceNorm2d 适用于通道数据(如 RGB 图像)中的每个通道,而 LayerNorm 则通常应用于整个样本,并且在自然语言处理任务中较为常见。此外,LayerNorm 会应用逐元素的仿射变换,而 InstanceNorm2d 则通常不会应用这种变换。

参数
  • num_features (int) – CC,表示预期输入大小为 (N,C,H,W)(N, C, H, W)(C,H,W)(C, H, W) 的值

  • eps (float) — 一个添加到分母的值,用于保证数值稳定性。默认值为 1e-5。

  • momentum (Optional[float]) – 用于 running_mean 和 running_var 计算的动量值。默认:0.1

  • affine (bool) – 一个布尔值,当设置为True时,此模块将具有可学习的仿射参数,并且初始化方式与批量归一化相同。默认值: False

  • track_running_stats (bool) – 一个布尔值,当设置为True时,此模块会跟踪运行均值和方差;当设置为False时,此模块不会进行统计,并且在训练模式和评估模式下始终使用批量统计信息。默认值: False

形状:
  • 输入: (N,C,H,W)(N, C, H, W)(C,H,W)(C, H, W)

  • 输出: (N,C,H,W)(N, C, H, W)(C,H,W)(C, H, W)(与输入的形状相同)

示例:

>>> # Without Learnable Parameters
>>> m = nn.InstanceNorm2d(100)
>>> # With Learnable Parameters
>>> m = nn.InstanceNorm2d(100, affine=True)
>>> input = torch.randn(20, 100, 35, 45)
>>> output = m(input)
本页目录