torch.nn.functional.embedding¶
- torch.nn.functional.embedding(input, weight, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False)[源代码]¶
生成一个简单的查找表,用于在固定字典和大小中查找嵌入。
此模块常用于通过索引检索词嵌入。 输入到模块的是一个索引列表和嵌入矩阵, 输出是对应的词嵌入。
有关更多详细信息,请参阅
torch.nn.Embedding
。注意
请注意,关于
weight
中由padding_idx
指定的行的条目的此函数的解析梯度预计与数值梯度不同。注意
请注意,:class:`torch.nn.Embedding 与该函数不同之处在于,它在构造时将由
padding_idx
指定的weight
行初始化为全零。- Parameters
输入 (LongTensor) – 包含嵌入矩阵索引的张量
weight (Tensor) – 嵌入矩阵,行数等于最大可能索引 + 1,列数等于嵌入大小
padding_idx (int, 可选) – 如果指定,
padding_idx
处的条目不会对梯度做出贡献; 因此,在训练期间,padding_idx
处的嵌入向量不会更新, 即它保持为一个固定的“填充”。max_norm (浮点数, 可选) – 如果给出,每个范数大于
max_norm
的嵌入向量将被重新调整为范数max_norm
。 注意:这将就地修改weight
。norm_type (float, 可选) – 用于
max_norm
选项的 p-范数的 p 值。默认值为2
。scale_grad_by_freq (布尔值, 可选) – 如果给定,这将按小批量中单词的频率的倒数来缩放梯度。默认值为
False
。稀疏 (布尔值, 可选) – 如果
True
,相对于权重
的梯度将是一个稀疏张量。有关稀疏梯度的更多详细信息,请参阅torch.nn.Embedding
下的注释。
- Return type
- Shape:
输入:包含要提取索引的任意形状的 LongTensor
权重: 浮点型嵌入矩阵,形状为 (V, embedding_dim), 其中 V = 最大索引 + 1 且 embedding_dim = 嵌入大小
输出: (*, embedding_dim), 其中 * 是输入形状
示例:
>>> # 一批包含2个样本,每个样本有4个索引 >>> input = torch.tensor([[1, 2, 4, 5], [4, 3, 2, 9]]) >>> # 一个包含10个大小为3的张量的嵌入矩阵 >>> embedding_matrix = torch.rand(10, 3) >>> F.embedding(input, embedding_matrix) tensor([[[ 0.8490, 0.9625, 0.6753], [ 0.9666, 0.7761, 0.6108], [ 0.6246, 0.9751, 0.3618], [ 0.4161, 0.2419, 0.7383]], [[ 0.6246, 0.9751, 0.3618], [ 0.0237, 0.7794, 0.0528], [ 0.9666, 0.7761, 0.6108], [ 0.3385, 0.8612, 0.1867]]]) >>> # 带有padding_idx的示例 >>> weights = torch.rand(10, 3) >>> weights[0, :].zero_() >>> embedding_matrix = weights >>> input = torch.tensor([[0, 2, 0, 5]]) >>> F.embedding(input, embedding_matrix, padding_idx=0) tensor([[[ 0.0000, 0.0000, 0.0000], [ 0.5609, 0.5384, 0.8720], [ 0.0000, 0.0000, 0.0000], [ 0.6262, 0.2438, 0.7471]]])