pytorch 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,则与权重矩阵相关的梯度转变为稀疏张量。

代码示例

import torch
import torch.nn as nn
embedding = nn.Embedding(10, 3)
input1 = torch.LongTensor([0,1,2,3,4,5,6,7,8,9])
input2 = torch.LongTensor([0,1,2,3,4,5,6,7,8,9,0,1,2])
print(input1.shape)
print(embedding(input1))
print(embedding(input1).shape)
print(input2.shape)
print(embedding(input2))
print(embedding(input2).shape)

参数说明:

  • 词典的大小 = 10【此时index为(0-9),如果输入的index>9,会报 IndexError】
  • 每个词编码为3维大小的向量
  • 输入的index一样时,编码的结果也一样(如input2 中后面的0,1,2对应编码后的向量与前面的0,1,2编码后的向量相同)
    OUTPUT:
torch.Size([10])
tensor([[ 2.1257e-01,  3.7856e-01, -1.7622e+00],
        [-9.1479e-01,  1.3890e+00, -9.7418e-01],
        [ 1.8179e+00, -1.0590e+00, -6.9496e-01],
        [ 1.7088e-01, -3.6295e-01, -9.2374e-04],
        [-1.1558e+00, -1.3642e+00, -3.5481e-01],
        [-6.2106e-01, -1.5230e-01, -2.6354e+00],
        [ 1.9605e-01,  2.5246e+00,  1.9009e+00],
        [ 3.6155e-01, -5.9008e-01, -9.4289e-01],
        [ 1.1621e+00,  1.0859e+00, -9.6472e-01],
        [ 1.6503e-01, -3.6054e-01, -6.2835e-01]], grad_fn=<EmbeddingBackward0>)
torch.Size([10, 3])
torch.Size([13])
tensor([[ 2.1257e-01,  3.7856e-01, -1.7622e+00],
        [-9.1479e-01,  1.3890e+00, -9.7418e-01],
        [ 1.8179e+00, -1.0590e+00, -6.9496e-01],
        [ 1.7088e-01, -3.6295e-01, -9.2374e-04],
        [-1.1558e+00, -1.3642e+00, -3.5481e-01],
        [-6.2106e-01, -1.5230e-01, -2.6354e+00],
        [ 1.9605e-01,  2.5246e+00,  1.9009e+00],
        [ 3.6155e-01, -5.9008e-01, -9.4289e-01],
        [ 1.1621e+00,  1.0859e+00, -9.6472e-01],
        [ 1.6503e-01, -3.6054e-01, -6.2835e-01],
        [ 2.1257e-01,  3.7856e-01, -1.7622e+00],
        [-9.1479e-01,  1.3890e+00, -9.7418e-01],
        [ 1.8179e+00, -1.0590e+00, -6.9496e-01]], grad_fn=<EmbeddingBackward0>)
torch.Size([13, 3])

Process finished with exit code 0

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