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)[source][source]¶
计算嵌入包的总和、平均值或最大值。
计算不实例化中间嵌入。请参阅
torch.nn.EmbeddingBag获取更多详细信息。注意
当在 CUDA 设备上给定张量时,此操作可能会产生非确定性的梯度。有关更多信息,请参阅可重现性。
- 参数:
输入(LongTensor)- 包含嵌入矩阵索引袋的 Tensor
权重(Tensor)- 嵌入矩阵的行数等于最大可能索引+1,列数等于嵌入大小
偏移量(LongTensor,可选)- 仅当
input为 1D 时使用。offsets确定每个袋(序列)在input中的起始索引位置。最大范数(float,可选)- 如果给定,则将范数大于
max_norm的每个嵌入向量重新归一化,使其范数为max_norm。注意:这将就地修改weight。norm_type (float, 可选) – 要计算的
p-norm 中的p选项。默认为2。scale_grad_by_freq (bool, 可选) – 如果提供,则将梯度按 mini-batch 中单词的频率的倒数进行缩放。默认为
False。注意:当mode="max"时,此选项不受支持。mode (str, 可选) –
"sum","mean"或"max"。指定减少包的方式。默认:"mean"sparse (bool, 可选) – 如果
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的嵌入向量不包括在缩减中。
- 返回类型:
- 形状:
input(LongTensor) 和offsets(LongTensor, 可选)如果
input是形状为(B, N)的 2D,它将被视为B个固定长度为N的袋子(序列),这将返回B个值,其聚合方式取决于mode。offsets被忽略,在这种情况下必须为None。如果
input是形状为(N)的 1D,它将被视为多个袋子的连接(序列)。offsets必须是一个 1D 张量,包含每个袋子在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]])