nn.Embedding的用法

torch.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)
  • 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,则与权重矩阵相关的梯度转变为稀疏张量。

引用自:

作者:top_小酱油
链接:https://www.jianshu.com/p/63e7acc5e890
来源:简书
 

现在我们来试验一下nn.Enbedding的具体用法:

 我们定义一个X,这个X的shape是(4,5),在nlp中,4代表banch_size, 5代表len_sequence

然后我们定义的Embedding的两个参数是9和3。

现在,我们运行一下:

 运行结果如上,可以看出一个(4,5,3)的张量,(4,5)是我们输入的shape,3是我们用一个3维的向量来表示每一个Word。(所以embedding第二个数字可以随便设置,只要你的硬件设施跟得上。)现在我们来看第一个数字9代表的含义:在我设置的X里面,如果数字从小到大排列可以看出来是0~8共9个类别,所以Embedding的第一个数字代表的就是你输入的类别数,可以大于你现有的类别,但不能小于,如下图:

当我把第一个数字变为10时:

结果是可以运行的,但是当我把第一个改为8 :

 

就会出现以上的错误,显示你的索引超出了设定值,就是因为你有9个类别,但是值设定了8个索引 。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值