Shortcuts

LayerNorm

class torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True, bias=True, device=None, dtype=None)[源代码]

对输入的小批量数据应用层归一化。

该层实现了论文中描述的操作 Layer Normalization

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

均值和标准差是基于最后D个维度计算的,其中Dnormalized_shape的维度。例如,如果normalized_shape(3, 5)(一个二维形状),则均值和标准差是基于输入的最后两个维度计算的(即input.mean((-2, -1)))。 γ\gammaβ\betanormalized_shape的可学习仿射变换参数,如果elementwise_affineTrue。 标准差是通过有偏估计量计算的,等同于torch.var(input, unbiased=False)

注意

与批量归一化和实例归一化不同,批量归一化和实例归一化在每个整个通道/平面应用标量缩放和偏置,使用affine选项,而层归一化应用逐元素的缩放和偏置,使用elementwise_affine

该层在训练和评估模式下均使用从输入数据计算的统计数据。

Parameters
  • normalized_shape (intlisttorch.Size) –

    从预期输入的大小中获取的输入形状

    [×normalized_shape[0]×normalized_shape[1]××normalized_shape[1]][* \times \text{normalized\_shape}[0] \times \text{normalized\_shape}[1] \times \ldots \times \text{normalized\_shape}[-1]]

    如果使用单个整数,它将被视为单例列表,并且此模块将在预期为该特定大小的最后一个维度上进行归一化。

  • eps (float) – 为了数值稳定性而添加到分母中的值。默认值:1e-5

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

  • 偏差 (布尔值) – 如果设置为 False,该层将不会学习一个加性偏差(仅在 elementwise_affineTrue 时相关)。默认值:True

Variables
  • 权重 – 模块的可学习权重,形状为 normalized_shape\text{normalized\_shape}elementwise_affine 设置为 True 时。 这些值初始化为 1。

  • 偏置 – 模块的可学习偏置,形状为 normalized_shape\text{normalized\_shape}elementwise_affine 设置为 True 时。 其值初始化为0。

Shape:
  • 输入: (N,)(N, *)

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

示例:

>>> # NLP示例
>>> batch, sentence_length, embedding_dim = 20, 5, 10
>>> embedding = torch.randn(batch, sentence_length, embedding_dim)
>>> layer_norm = nn.LayerNorm(embedding_dim)
>>> # 激活模块
>>> layer_norm(embedding)
>>>
>>> # 图像示例
>>> N, C, H, W = 20, 5, 10, 10
>>> input = torch.randn(N, C, H, W)
>>> # 在最后三个维度上进行归一化(即通道和空间维度)
>>> # 如下图所示
>>> layer_norm = nn.LayerNorm([C, H, W])
>>> output = layer_norm(input)
../_images/layer_norm.jpg
优云智算