快捷键

嵌入包 ¶

class torch.nn.EmbeddingBag(num_embeddings, embedding_dim, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, _weight=None, include_last_offset=False, padding_idx=None, device=None, dtype=None)[source][source]

计算嵌入“包”的总和或平均值,无需实例化中间嵌入。

对于长度恒定的包,没有 per_sample_weights ,没有索引等于 padding_idx ,并且对于 2D 输入,此类

  • mode="sum" 等价于 Embedding 后跟 torch.sum(dim=1)

  • 使用 mode="mean" 等同于先使用 Embedding 再使用 torch.mean(dim=1)

  • 使用 mode="max" 等同于先使用 Embedding 再使用 torch.max(dim=1)

然而, EmbeddingBag 比使用一系列这些操作在时间和内存效率上要高得多。

EmbeddingBag 还支持将样本权重作为 forward pass 的参数。这会在执行 mode 指定的加权降维之前缩放 Embedding 的输出。如果传递了 per_sample_weights ,则唯一支持的 mode"sum" ,它根据 per_sample_weights 计算加权求和。

参数:
  • num_embeddings (int) – 词嵌入字典的大小

  • embedding_dim (int) – 每个嵌入向量的大小

  • max_norm (float, optional) – 如果给定,则将范数大于 max_norm 的每个嵌入向量重新归一化,使其范数为 max_norm

  • norm_type (float, optional) – 用于计算 max_norm 选项的 p 范数的 p。默认为 2

  • scale_grad_by_freq (bool, 可选) – 如果提供,则将梯度按 mini-batch 中单词的频率的倒数进行缩放。默认为 False 。注意:当 mode="max" 时,此选项不受支持。

  • mode (str, 可选) – "sum""mean""max" 。指定减少 bag 的方式。 "sum" 计算加权求和,考虑 per_sample_weights"mean" 计算 bag 中值的平均值, "max" 计算每个 bag 中的最大值。默认: "mean"

  • sparse (bool, 可选) – 如果 True ,则相对于 weight 的矩阵的梯度将是稀疏张量。有关稀疏梯度的更多详细信息,请参阅注释。注意:当 mode="max" 时,此选项不受支持。

  • include_last_offset (bool, 可选) – 如果 True ,则 offsets 将有一个额外的元素,其中最后一个元素等于索引的大小。这与 CSR 格式相匹配。

  • padding_idx(int,可选)- 如果指定, padding_idx 处的条目不参与梯度计算;因此, padding_idx 处的嵌入向量在训练期间不会更新,即保持为固定的“填充”。对于新构建的 EmbeddingBag, padding_idx 处的嵌入向量将默认为全零,但可以更新为其他值作为填充向量。请注意, padding_idx 处的嵌入向量被排除在缩减之外。

变量:

weight(张量)- 模块的可学习权重,形状为(num_embeddings,embedding_dim),从 N(0,1)\mathcal{N}(0, 1) 初始化。

示例:

>>> # an EmbeddingBag module containing 10 tensors of size 3
>>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum')
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.tensor([1, 2, 4, 5, 4, 3, 2, 9], dtype=torch.long)
>>> offsets = torch.tensor([0, 4], dtype=torch.long)
>>> embedding_sum(input, offsets)
tensor([[-0.8861, -5.4350, -0.0523],
        [ 1.1306, -2.5798, -1.0044]])

>>> # Example with padding_idx
>>> embedding_sum = nn.EmbeddingBag(10, 3, mode='sum', padding_idx=2)
>>> input = torch.tensor([2, 2, 2, 2, 4, 3, 2, 9], dtype=torch.long)
>>> offsets = torch.tensor([0, 4], dtype=torch.long)
>>> embedding_sum(input, offsets)
tensor([[ 0.0000,  0.0000,  0.0000],
        [-0.7082,  3.2145, -2.6251]])

>>> # An EmbeddingBag can be loaded from an Embedding like so
>>> embedding = nn.Embedding(10, 3, padding_idx=2)
>>> embedding_sum = nn.EmbeddingBag.from_pretrained(
        embedding.weight,
        padding_idx=embedding.padding_idx,
        mode='sum')
forward(input, offsets=None, per_sample_weights=None)[source][source]

EmbeddingBag 的前向传递。

参数:
  • 输入(Tensor)- 包含嵌入矩阵索引袋的 Tensor。

  • 偏移量(Tensor,可选)- 仅当 input 为 1D 时使用。 offsets 确定每个袋(序列)在 input 中的起始索引位置。

  • 每个样本权重(Tensor,可选)- 一个浮点/双精度权重 Tensor,或 None 表示所有权重都应取为 1 。如果指定, per_sample_weights 必须与输入具有相同的形状,并且如果它们不是 None ,则被视为具有相同的 offsets 。仅支持 mode='sum'

返回值:

Tensor 输出形状为(B,嵌入维度)。

返回类型:

张量

注意

关于 inputoffsets 的一些说明:

  • inputoffsets 必须是同一类型,要么是 int,要么是 long

  • 如果 input 是形状为(B, N)的 2D,它将被视为 B 个固定长度为 N 的袋子(序列),这将返回 B 个值,其聚合方式取决于 modeoffsets 被忽略,在这种情况下必须为 None

  • 如果 input 是形状为(N)的 1D,它将被视为多个袋子的连接(序列)。 offsets 必须是一个 1D 张量,包含每个袋子在 input 中的起始索引位置。因此,对于形状为(B)的 offsetsinput 将被视为有 B 个袋子。空袋子(即长度为 0 的)将返回由零填充的向量。

from_pretrained(embeddings, freeze=True, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, mode='mean', sparse=False, include_last_offset=False, padding_idx=None)[source][source] ¶

从给定的二维 FloatTensor 创建 EmbeddingBag 实例。

参数:
  • embeddings (Tensor) – 包含 EmbeddingBag 权重信息的 FloatTensor。第一维作为‘num_embeddings’传递给 EmbeddingBag,第二维作为‘embedding_dim’。

  • freeze (bool, 可选) – 如果设置为 True,则张量在训练过程中不会被更新。相当于 embeddingbag.weight.requires_grad = False 。默认值: True

  • max_norm (浮点数,可选) – 请参阅模块初始化文档。默认: None

  • norm_type (浮点数,可选) – 请参阅模块初始化文档。默认 2

  • scale_grad_by_freq (布尔值,可选) – 请参阅模块初始化文档。默认 False

  • mode (字符串,可选) – 请参阅模块初始化文档。默认: "mean"

  • 稀疏(布尔值,可选)- 请参阅模块初始化文档。默认值: False

  • include_last_offset(布尔值,可选)- 请参阅模块初始化文档。默认值: False

  • padding_idx(整数,可选)- 请参阅模块初始化文档。默认值: None

返回类型:

EmbeddingBag

示例:

>>> # FloatTensor containing pretrained weights
>>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
>>> embeddingbag = nn.EmbeddingBag.from_pretrained(weight)
>>> # Get embeddings for index 1
>>> input = torch.LongTensor([[1, 0]])
>>> embeddingbag(input)
tensor([[ 2.5000,  3.7000,  4.6500]])

© 版权所有 PyTorch 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源