刘二大人《PyTorch深度学习实践》完结合集——第12课:循环神经网络(基础篇)-embedding 函数解读

CLASStorch.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, device=None, dtype=None)[

torch.nn.Embedding经常用来存储单词embedding,使用对应indices进行检索对应的embedding。从上面的官方参数看:

输入(最重要的还是前三个参数):

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),词向量维度]

注:

对句子进行规整,即对长度不满足条件的句子进行填充pad(填充的值也可以自己选定),另外句子结尾的EOS也算作一个词。
可以通过weight看对应的embedding字典矩阵对应的初始化数值,一般是通过正态分布进行初始化。

nn.Embedding的shape,注意是会多添加一个embedding_dim维度:

原来高维度的One-hot向量就变成低纬度,稠密的向量

这里可以理解1*4维的input张量做了转置变成4*1的张量,0对应的是[-0.8736,  0.7243,  1.1653],

后面依次对应,最终经过embedding(input),得到torch.Size([1, 4, 3])的张量


import torch

embedding = torch.nn.Embedding(10, 3, padding_idx=2)
print(embedding.weight, "\n")

input = torch.LongTensor([[0,2,0,5]])  # 1*4 dim
print(input.shape, "\n")

ans2 = embedding(input)
print(ans2.shape)  # torch.Size([1, 4, 3])
print(ans2)

D:\Anaconda\envs\study\python.exe "D:\python pycharm learning\刘二大人课程\P\11.py" 
Parameter containing:
tensor([[-0.8736,  0.7243,  1.1653],
        [-2.2606, -1.2429,  1.0620],
        [ 0.0000,  0.0000,  0.0000],
        [ 0.5118, -0.1002, -1.6790],
        [ 0.2880,  1.1682,  0.3026],
        [ 0.5131,  1.1900, -0.2184],
        [ 1.4648, -0.8761, -0.1076],
        [ 3.7302,  0.0611, -1.1669],
        [ 0.3133, -0.3995,  0.1818],
        [ 0.5087,  0.3353, -0.6273]], requires_grad=True) 

torch.Size([1, 4]) 

torch.Size([1, 4, 3])
tensor([[[-0.8736,  0.7243,  1.1653],
         [ 0.0000,  0.0000,  0.0000],
         [-0.8736,  0.7243,  1.1653],
         [ 0.5131,  1.1900, -0.2184]]], grad_fn=<EmbeddingBackward0>)

Process finished with exit code 0
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值