torch.nn.Embedding使用详解

随机初始化词向量,词向量值在正态分布N(0,1)中随机取值。
参数:
num_embeddings:词典的大小尺寸,index从0开始
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,规整后的句子长度]
输出维数:
[batch_size,规整后的句子长度,词向量维度]

# 对原始句子规整为同一长度:
# 规整包括:句子中的符号算作词,句子结尾加的EOS也算作一个词,对于长度不足的句子,填充pad

import torch
import torch.nn as nn

x = torch.LongTensor([[1, 2, 4], [4, 3, 2]]) # 2个句子,每个句子3个词
embeddings = nn.Embedding(5, 6, padding_idx=4) # 一共5个词,每个词的词向量维度设置为6维,pad取值为序号4
print(embeddings(x))
print(embeddings(x).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=<EmbeddingBackward>)
torch.Size([2, 3, 6])

'''
  • 31
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值