Shortcuts

torch.nn.functional.embedding_bag

torch.nn.functional.embedding_bag(input, weight, offsets=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, mode='mean', sparse=False, per_sample_weights=None, include_last_offset=False, padding_idx=None)[源代码]

计算嵌入向量的总和、均值或最大值。

计算是在不实例化中间嵌入的情况下完成的。 有关更多详细信息,请参见torch.nn.EmbeddingBag

注意

当在CUDA设备上给定张量时,此操作可能会产生不确定的梯度。更多信息请参见可重复性

Parameters
  • 输入 (LongTensor) – 包含指向嵌入矩阵索引的张量

  • weight (Tensor) – 嵌入矩阵,行数等于最大可能索引 + 1,列数等于嵌入大小

  • 偏移量LongTensor可选)——仅在 输入 为1D时使用。偏移量 决定了每个包(序列)在 输入 中的起始索引位置。

  • max_norm (浮点数, 可选) – 如果给出,每个范数大于 max_norm 的嵌入向量将被重新调整为范数 max_norm。 注意:这将就地修改 weight

  • norm_type (float, 可选) – 在 max_norm 选项中计算的 p-范数的 p。 默认值为 2

  • scale_grad_by_freq (布尔值, 可选) – 如果给出,这将按小批量中单词的频率的倒数来缩放梯度。默认值为 False。 注意:当 mode="max" 时,此选项不受支持。

  • 模式 (字符串, 可选) – "sum", "mean""max"。指定减少袋子的方式。 默认值: "mean"

  • 稀疏 (布尔值, 可选) – 如果 True,相对于 weight 的梯度将是一个稀疏张量。有关稀疏梯度的更多详细信息,请参阅 torch.nn.Embedding 下的注释。 注意:当 mode="max" 时,此选项不受支持。

  • per_sample_weights (Tensor, 可选) – 一个浮点数/双精度权重的张量,或者None 以表示所有权重应视为1。如果指定,per_sample_weights 必须与输入具有完全相同的形状,并且如果这些形状不为None,则视为具有相同的 offsets

  • include_last_offset (bool, 可选) – 如果 True,偏移量的大小等于袋的数量 + 1。 最后一个元素是输入的大小,或最后一个袋(序列)的结束索引位置。

  • padding_idx (int, 可选) – 如果指定,位于 padding_idx 的条目不会对梯度做出贡献;因此,在训练期间,位于 padding_idx 的嵌入向量不会被更新,即它保持为一个固定的“填充”。请注意,位于 padding_idx 的嵌入向量不参与归约。

Return type

张量

Shape:
  • input(LongTensor)和offsets(LongTensor,可选)

    • 如果 input 是形状为 (B, N) 的二维数组,它将被视为 B 个袋子(序列),每个袋子的固定长度为 N,并且这将返回以某种方式聚合的 B 个值,具体取决于 mode。在这种情况下,offsets 被忽略,并且需要为 None

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

  • weight (Tensor): 模块的可学习权重,形状为 (num_embeddings, embedding_dim)

  • per_sample_weights(张量,可选)。与input具有相同的形状。

  • output: 形状为 (B, embedding_dim) 的聚合嵌入值

示例:

>>> # 包含10个大小为3的张量的嵌入模块
>>> embedding_matrix = torch.rand(10, 3)
>>> # 每个样本包含4个索引的2个批次
>>> input = torch.tensor([1, 2, 4, 5, 4, 3, 2, 9])
>>> offsets = torch.tensor([0, 4])
>>> F.embedding_bag(input, embedding_matrix, offsets)
tensor([[ 0.3397,  0.3552,  0.5545],
        [ 0.5893,  0.4386,  0.5882]])

>>> # 带有padding_idx的示例
>>> embedding_matrix = torch.rand(10, 3)
>>> input = torch.tensor([2, 2, 2, 2, 4, 3, 2, 9])
>>> offsets = torch.tensor([0, 4])
>>> F.embedding_bag(input, embedding_matrix, offsets, padding_idx=2, mode='sum')
tensor([[ 0.0000,  0.0000,  0.0000],
        [-0.7082,  3.2145, -2.6251]])
优云智算