torch.nn.Embedding

torch.nn.EmbeddingPyTorch 中的一个模块,它是一个简单的查找表,用于存储固定字典和大小的嵌入。这个模块通常用于存储词嵌入并使用索引检索它们。模块的输入是索引列表,输出是相应的词嵌入。

参数

示例

Embedding 模块的使用非常简单。首先,你需要创建一个 Embedding 对象,指定你想要的嵌入字典的大小和每个嵌入向量的大小。然后,你可以使用这个对象来获取索引的嵌入。

# 创建一个包含 10 个大小为 3 的张量的 Embedding 模块
embedding = nn.Embedding(10, 3)
# 一个包含 2 个样本,每个样本有 4 个索引的批次
input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
# 获取嵌入
output = embedding(input)

以下是一些使用 Embedding 模块的示例:

# 示例1:使用 Embedding 模块
embedding = nn.Embedding(10, 3)
input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
output = embedding(input)
# 示例2:使用 padding_idx
embedding = nn.Embedding(10, 3, padding_idx=0)
input = torch.LongTensor([[0, 2, 0, 5]])
output = embedding(input)
# 示例3:更改 `pad` 向量
padding_idx = 0
embedding = nn.Embedding(3, 3, padding_idx=padding_idx)
with torch.no_grad():
    embedding.weight[padding_idx] = torch.ones(3)
# 示例4:从预训练权重创建 Embedding
weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
embedding = nn.Embedding.from_pretrained(weight)
input = torch.LongTensor([1])
output = embedding(input)

从预训练的权重创建 Embedding

PyTorch 提供了一个非常有用的方法,允许我们从预训练的权重创建 Embedding 实例。这个方法叫做 Embedding.from_pretrained

这个方法需要一个 FloatTensor,该 FloatTensor 包含预训练的权重。这个 FloatTensor 的第一维度被传递给 Embedding 作为 num_embeddings(嵌入字典的大小),第二维度作为 embedding_dim(每个嵌入向量的大小)。

此外,Embedding.from_pretrained 方法还接受几个可选参数,包括:

以下是一个使用 Embedding.from_pretrained 方法的例子:

# FloatTensor 包含预训练权重
weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
# 从预训练权重创建 Embedding
embedding = nn.Embedding.from_pretrained(weight)
# 获取索引 1 的嵌入
input = torch.LongTensor([1])
output = embedding(input)

在这个例子中,我们首先创建了一个包含预训练权重的 FloatTensor。然后,我们使用这个 FloatTensor 创建了一个 Embedding 实例。最后,我们获取了索引 1 的嵌入。

这种从预训练权重创建 Embedding 的能力非常有用,特别是当我们想要使用预训练的词嵌入(如 GloVe 或 Word2Vec)来初始化我们的 Embedding 层时。


本文作者:Maeiee

本文链接:torch.nn.Embedding

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!