关于torch.nn.Embedding需要注意的几点

关于torch.nn.Embedding需要注意的几点

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)
主要参数说明:

num_embeddings:词字典的数量(最大索引值)
embedding_dim:词向量的维度
padding_idx:强制指定某索引值的词向量值

关于Embedding的简单理解:

说白了,Embedding的作用就是将你所有的词放入到一个字典里(词去重),该字典的键是词的索引,值是该词,然后Embedding会将这些字典中的"索引"转成指定维度的向量,比如:

word_dict = {0:'我',1:'喜欢',2:'吃',4:'西瓜'}
eb = torch.nn.Emebdding(4,6) #最大词索引为4,词向量长度为6
eb0 =eb(0)  #将0转成词向量
eb1 =eb(1)  #将1转成词向量
...
注意一:Embedding输入的参数是索引值

上述eb0,eb1中输入的值为你字典的key,也就是自定义字典中的词索引。

注意二:num_embedding是最大词索引值,并不是所有词索引的总和。
import torch

eb = torch.nn.Embedding(4,6)
t = torch.tensor(5)
r = eb(t)
print(r)

上述eb就会报错IndexError: index out of range in self
传入的t值必须是小于4的,等于4都不行!

注意三:padding_idx指定索引值转成词向量后,该词向量的元素全为0

padding_idx的作用是将你字典中指定的词索引在进行Emedding时,全部转成的词向量的各元素值全为0
比如:如果指定索引为2的词向量结果

eb = torch.nn.Embedding(4,6,padding_idx=2)
t = torch.tensor(2)
r = eb(t)
print(r)
#结果为:
tensor([0., 0., 0., 0., 0., 0.], grad_fn=<EmbeddingBackward>)

你可能感兴趣的:(pytorch,pytorch,Emebdding)