CLASS torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2.0, scale_grad_by_freq=False, sparse=False, _weight=None, _freeze=False, device=None, dtype=None)
主要参数介绍:
num_embeddings
: embedding字典大小embedding_dim
:每个embedding向量的大小、pddding_idx(optional)
:如果设置了 padding_idx
,其对应的 entries 就不会对梯度有贡献。
padding_idx
位置的 embedding 在训练的时候不会更新,是一个固定的 pad
padding_idx
处的embedding向量是全0,也可以用其他值来代替不含 padding_idx
input = torch.tensor([[0, 1, 2], [1, 2, 3]])
embedding = nn.Embedding(4, 3)
print(embedding(input))
>tensor([[[ 0.5663, 1.6136, -0.7869],
[ 0.1662, 0.1890, 1.2086],
[-1.1227, -0.0549, -0.8810]],
[[ 0.1662, 0.1890, 1.2086],
[-1.1227, -0.0549, -0.8810],
[ 1.1553, -0.9264, -2.2916]]], grad_fn=<EmbeddingBackward0>)
Embedding
创建了一个 4x3
的矩阵,一共可以表示4个索引,每个表示都是一个包含3个数字的向量包含 padding_idx
input = torch.tensor([[0, 1, 2], [1, 2, 3]])
embedding = nn.Embedding(4, 3, padding_idx=1)
print(embedding(input))
>tensor([[[-1.8803, -0.3651, 0.0161],
[ 0.0000, 0.0000, 0.0000],
[ 1.6608, -0.0528, 1.3493]],
[[ 0.0000, 0.0000, 0.0000],
[ 1.6608, -0.0528, 1.3493],
[ 2.0451, 0.5492, 0.5848]]], grad_fn=<EmbeddingBackward0>)
padding_idx=1
的embedding vector为全 0padding_idx
在backward gradient时会被忽略,参考链接