apex.normalization.fused_layer_norm

class apex.normalization.FusedLayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True)[source]

应用层归一化 (Layer Normalization) 到小批量输入,如论文 Layer Normalization 中所述。

目前仅在 cuda() 张量上运行。

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

均值和标准差分别在最后特定数量的维度上计算,这些维度的形状必须由 normalized_shape 指定。如果 elementwise_affineTrue,则 \(\gamma\)\(\beta\)normalized_shape 的可学习仿射变换参数。

注意

与 Batch Normalization 和 Instance Normalization 不同,它们使用 affine 选项对每个整个通道/平面应用标量尺度和偏置,层归一化使用 elementwise_affine 应用逐元素的尺度和偏置。

此层在训练模式和评估模式下都使用从输入数据计算出的统计信息。

参数
  • normalized_shape (intlisttorch.Size) –

    输入张量的期望尺寸,例如

    \[[* \times \text{normalized}\_\text{shape}[0] \times \text{normalized}\_\text{shape}[1] \times \ldots \times \text{normalized}\_\text{shape}[-1]]\]

    如果使用单个整数,则将其视为包含一个元素的列表,并且此模块将对最后一个维度进行归一化,该维度的尺寸应为该特定整数。

  • eps – 用于提高数值稳定性的添加到分母的值。默认值:1e-5

  • elementwise_affine – 一个布尔值。当设置为 True 时,此模块具有可学习的逐元素仿射参数,初始化为全一(用于权重)和全零(用于偏置)。默认值:True

形状
  • 输入: \((N, *)\)

  • 输出: \((N, *)\) (与输入形状相同)

示例

>>> input = torch.randn(20, 5, 10, 10)
>>> # With Learnable Parameters
>>> m = apex.normalization.FusedLayerNorm(input.size()[1:])
>>> # Without Learnable Parameters
>>> m = apex.normalization.FusedLayerNorm(input.size()[1:], elementwise_affine=False)
>>> # Normalize over last two dimensions
>>> m = apex.normalization.FusedLayerNorm([10, 10])
>>> # Normalize over last dimension of size 10
>>> m = apex.normalization.FusedLayerNorm(10)
>>> # Activating the module
>>> output = m(input)
extra_repr()[source]

设置模块的额外表示

要打印自定义的额外信息,您应该在自己的模块中重新实现此方法。单行和多行字符串均可接受。

forward(input)[source]

定义每次调用时执行的计算。

应由所有子类重写。

注意

尽管前向传播的逻辑需要在该函数中定义,但之后应该调用 Module 实例而不是直接调用此函数,因为前者负责运行已注册的钩子,而后者会静默忽略它们。