torch.nn.Embedding使用详解

torch.nn.Embedding: 随机初始化词向量,词向量值在正态分布N(0,1)中随机取值。

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

对原始句子规整为同一长度:
规整包括:句子中的符号算作词,句子结尾加的EOS也算作一个词,对于长度不足的句子,填充pad,下面例子中pad取值为序号4
被作用了embedding的初始数据:
[规整后的句子长度,样本个数(batch_size)] 这里是引用

举例:

# 举例

import torch
import torch.nn as nn


# 输入
# 规整后句子统一长度为2(每个句子2个词),3个句子,词和词id对应后,第一个句子为[1,4],第二个句子为[2,3],第三个句子为[4,2]
# 如下1、2、4分别为三个句子中的第一个词,即序列中的第一个位置
# 4、3、2分别为三个句子中的第二个词,序列中的第二个位置
x = torch.LongTensor([[1, 2, 4], [4, 3, 2]])

# 调用nn.Embedding函数
# 一共5个词,每个词的词向量维度设置为6维
embeddings = nn.Embedding(5, 6, padding_idx=4)
print(embeddings(x))
print(embeddings(x).size())

# 输出
# [规整后的句子长度,样本个数(batch_size),词向量维度]

'''
    
tensor([[[-1.7022,  0.2484, -0.6298,  0.4387,  2.0156, -1.7733],
         [ 0.3547,  0.5276,  1.1849,  0.2856, -0.1430,  0.6353],
         [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]],

        [[ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000],
         [-0.0493, -0.9472, -1.2716,  0.1427, -1.8054, -0.7027],
         [ 0.3547,  0.5276,  1.1849,  0.2856, -0.1430,  0.6353]]],
       grad_fn=)
torch.Size([2, 3, 6])

'''

参考链接:
torch.nn.Embedding
【pytorch】关于Embedding和GRU、LSTM的使用详解

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