Torch.nn.embedding

Torch.nn.embedding

相当于一个简单的存储固定大小的词典的嵌入向量的查找表,即,给定一个编号,嵌入层就能返回这个编号对应的嵌入向量,嵌入向量反映了各个编号代表的符号之间的语义关系。input为一个编号列表,output为对应的符号嵌入向量列表

主要作用

最早用于维度变化,也最常在nlp中所使用,即词嵌入操作,通俗来讲就是将文字转换为一串数字。词嵌入的过程,就相当于是制造出一本字典的过程。计算机可以通过这个字典来间接地识别文字。词嵌入向量的意思也可以理解成:词在神经网络中的向量表示。

现被使用于空间操作中,对于graph中各节点之间特征的潜在影响关系捕获。

调用参数

Embedding的输入参数如下:

Embedding(
num_embeddings: int, 
embedding_dim: int, 
padding_idx: Union[int, NoneType] = None,
max_norm: Union[float, NoneType] = None,
norm_type: float = 2.0, 
scale_grad_by_freq: bool = False, 
sparse: bool = False, 
_weight: Union[torch.Tensor, 
NoneType] = 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,则与权重矩阵相关的梯度转变为稀疏张量。

Shape:

关于输入、输出维度
| - Input: :math:(*), LongTensor of arbitrary shape containing the indices to extract
| - Output: :math:(*, H), where * is the input shape and :math: H=\text{embedding_dim}

Examples::

| >>> # an Embedding module containing 10 tensors of size 3
| >>> embedding = nn.Embedding(10, 3)
| >>> # a batch of 2 samples of 4 indices each
| >>> input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
| >>> embedding(input)
| tensor([[
| [-0.0251, -1.6902, 0.7172],
| [-0.6431, 0.0748, 0.6969],
| [ 1.4970, 1.3448, -0.9685],
| [-0.3677, -2.7265, -0.1685]],

| [[ 1.4970, 1.3448, -0.9685],
| [ 0.4362, -0.4004, 0.9400],
| [-0.6431, 0.0748, 0.6969],
| [ 0.9124, -2.3616, 1.1151]
| ]])

the shape of output:(2,4,3)

need attentioned points:

nn.embedding的输入只能是编号,不能是隐藏变量,比如one-hot,或者其它,这种情况,可以自己建一个自定义维度的线性网络层,参数训练可以单独训练或者跟随整个网络一起训练(看实验需要)
*
如果你指定了padding_idx,注意这个padding_idx也是在num_embeddings尺寸内的,比如符号总共有500个,指定了padding_idx,那么num_embeddings应该为501
*
embedding_dim的选择要注意,根据自己的符号数量,举个例子,如果你的词典尺寸是1024,那么极限压缩(用二进制表示)也需要10维,再考虑词性之间的相关性,怎么也要在15-20维左右,虽然embedding是用来降维的,但是>- 也要注意这种极限维度,结合实际情况,合理定义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值