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设备上时,此操作可能会产生非确定性的梯度。更多详细信息请参见重现性。
- 参数
-
-
输入 (LongTensor) – 包含嵌入矩阵索引包的张量
-
weight (Tensor) – 嵌入矩阵,其行数为最大可能索引加1,列数为嵌入维度大小。
-
offsets (LongTensor, 可选) – 仅在
input
是一维时使用。offsets
确定每个包(序列)在input
中的起始索引位置。 -
max_norm (float, optional) – 如果提供,每个范数大于
max_norm
的嵌入向量将被重新规范化为范数max_norm
。注意:这将会就地修改weight
。 -
norm_type (float, optional) – 参数
p
,用于计算max_norm
选项中的p
-范数。默认值为2
。 -
scale_grad_by_freq (bool, 可选) – 如果提供,将通过最小批量中单词频率的逆数来缩放梯度。默认值为
False
。注意:当mode="max"
时,此选项不被支持。 -
mode (str, optional) – 指定减少包的方式,可选值为
"sum"
、"mean"
或"max"
。默认值:"mean"
-
sparse (bool, optional) – 如果为
True
,weight
的梯度将是一个稀疏张量。有关稀疏梯度的更多详细信息,请参见torch.nn.Embedding
中的注释。注意:当mode="max"
时,此选项不被支持。 -
per_sample_weights (Tensor, 可选) – 一个包含浮点数或双精度权重的张量,或者为 None 表示所有权重都应视为1。如果指定了
per_sample_weights
,则它必须与输入具有相同的形状,并且在offsets
不为None时被视为具有相同的offsets
。 -
include_last_offset (bool, 可选) – 如果为
True
,偏移量的大小等于包的数量加1。最后一个元素表示输入的总大小或最后一个包(序列)的结束索引位置。 -
padding_idx (int, 可选) – 如果指定了
padding_idx
,则该索引位置的条目不参与梯度计算;因此,在训练过程中,padding_idx
处的嵌入向量不会被更新,保持为固定的“填充”状态。此外,padding_idx
处的嵌入向量也不参与缩减操作。
-
- 返回类型
- 形状:
-
-
input
(LongTensor) 和offsets
(LongTensor,可选)-
如果
input
是形状为(B, N)的2D张量,它将被视为包含B
个包(序列),每个包长度固定为N
。根据mode
参数,将返回B
个聚合后的值。offsets
在这种情况下会被忽略,并且必须设置为None
。 -
如果
input
是一个形状为 (N) 的一维张量,它会被视为多个包(序列)的连接。offsets
需要是一个包含每个包在input
中起始索引位置的一维张量。因此,对于形状为 (B) 的offsets
,input
将被视为包含B
个包。空包(即长度为0)返回的向量将用零填充。
-
-
weight
(Tensor): 模块的可学习权重,其形状为 (num_embeddings, embedding_dim) -
per_sample_weights
(张量,可选)。与input
具有相同的形状。 -
output
: 形状为 (B, embedding_dim) 的聚合嵌入值
-
示例:
>>> # an Embedding module containing 10 tensors of size 3 >>> embedding_matrix = torch.rand(10, 3) >>> # a batch of 2 samples of 4 indices each >>> 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]]) >>> # example with 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]])