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 (python:int) – 词典的大小尺寸,比如总共出现5000个词,那就输入5000。此时index为(0-4999)
    embedding_dim (python:int) – 嵌入向量的维度,即用多少维来表示一个符号。
  • padding_idx (python:int, optional) – 填充id,比如,输入长度为100,但是每次的句子长度并不一样,后面就需要用统一的数字填充,而这里就是指定这个数字,这样,网络在遇到填充id时,就不会计算其与其它符号的相关性。(初始化为0)
  • max_norm (python:float, optional) – 最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化。
  • norm_type (python:float, optional) – 指定利用什么范数计算,并用于对比max_norm,默认为2范数。
  • scale_grad_by_freq (boolean, optional) – 根据单词在mini-batch中出现的频率,对梯度进行放缩。默认为False.
  • sparse (bool, optional) – 若为True,则与权重矩阵相关的梯度转变为稀疏张量。

引用自:

作者:top_小酱油
链接:https://www.jianshu.com/p/63e7acc5e890
来源:简书
 

现在我们来试验一下nn.Enbedding的具体用法:

nn.Embedding的用法_第1张图片

 我们定义一个X,这个X的shape是(4,5),在nlp中,4代表banch_size, 5代表len_sequence

然后我们定义的Embedding的两个参数是9和3。

现在,我们运行一下:

nn.Embedding的用法_第2张图片

 运行结果如上,可以看出一个(4,5,3)的张量,(4,5)是我们输入的shape,3是我们用一个3维的向量来表示每一个Word。(所以embedding第二个数字可以随便设置,只要你的硬件设施跟得上。)现在我们来看第一个数字9代表的含义:在我设置的X里面,如果数字从小到大排列可以看出来是0~8共9个类别,所以Embedding的第一个数字代表的就是你输入的类别数,可以大于你现有的类别,但不能小于,如下图:

nn.Embedding的用法_第3张图片

当我把第一个数字变为10时:

nn.Embedding的用法_第4张图片 

结果是可以运行的,但是当我把第一个改为8 :

nn.Embedding的用法_第5张图片

 nn.Embedding的用法_第6张图片

就会出现以上的错误,显示你的索引超出了设定值,就是因为你有9个类别,但是值设定了8个索引 。

 

你可能感兴趣的:(人工智能,深度学习,python)