Pytorch学习笔记----torch.nn.Embedding(num_embeddings, embedding_dim)的理解

1.torch.nn.Embedding理解

class torch.nn.Embedding(num_embeddings, embedding_dim, padding_idx=None, max_norm=None, norm_type=2, scale_grad_by_freq=False, sparse=False)

参数解释:

num_embeddings (int) - 嵌入字典的大小

embedding_dim (int) - 每个嵌入向量的大小

padding_idx (int, optional) - 如果提供的话,输出遇到此下标时用零填充

max_norm (float, optional) - 如果提供的话,会重新归一化词嵌入,使它们的范数小于提供的值

norm_type (float, optional) - 对于max_norm选项计算p范数时的p

scale_grad_by_freq (boolean, optional) - 如果提供的话,会根据字典中单词频率缩放梯度

weight weight (Tensor) -形状为(num_embeddings, embedding_dim)的模块中可学习的权值

输入: LongTensor (N, W), N = mini-batch, W = 每个mini-batch中提取的下标数
输出: (N, W, embedding_dim)

这个语句是创建一个词嵌入模型,num_embeddings代表一共有多少个词,embedding_dim代表你想要为每个词创建一个多少维的向量来表示它

案例解释:

import torch
from torch import nn

embedding = nn.Embedding(5, 4) # 假定字典中只有5个词,词向量维度为4
word = [[1, 2, 3],
        [2, 3, 4]] # 每个数字代表一个词,例如 {'!':0,'how':1, 'are':2, 'you':3,  'ok':4}
                    #而且这些数字的范围只能在0~4之间,因为上面定义了只有5个词
embed = embedding(torch.LongTensor(word))
print(embed) 
print(embed.size())

输出:

tensor([[[-0.4093, -1.0110,  0.6731,  0.0790],
         [-0.6557, -0.9846, -0.1647,  2.2633],
         [-0.5706, -1.1936, -0.2704,  0.0708]],

        [[-0.6557, -0.9846, -0.1647,  2.2633],
         [-0.5706, -1.1936, -0.2704,  0.0708],
         [ 0.2242, -0.5989,  0.4237,  2.2405]]], grad_fn=<EmbeddingBackward>)
torch.Size([2, 3, 4])

embed输出的维度是[2, 3, 4],这就代表对于输入的[2,3]维的词,每一个词都被映射成了一个4维的向量。

 

上一篇:10、欠或过拟合的学习曲线,运用验证集选取正则化的L值


下一篇:c#MongoDB(noRM) – 包含嵌入文档的存储库模式