[Pytorch函数]nn.Embedding.weight

一、nn.Embedding.weight初始化分布

nn.Embedding.weight随机初始化方式是标准正态分布 [公式] ,即均值 μ = 0 \mu=0 μ=0,方差 σ = 1 \sigma=1 σ=1的正态分布。

import torch.nn as nn

# dim越大,均值、方差越接近0和1
dim = 800000
# 定义了一个(5, dim)的二维embdding
# 对于NLP来说,相当于是5个词,每个词的词向量维数是dim
# 每个词向量初始化为正态分布 N(0,1)(待验证)
embd = nn.Embedding(5, dim)
# type(embd.weight) is Parameter
# type(embd.weight.data) is Tensor
# embd.weight.data[0]是指(5, dim)的word embeddings中取第1个词的词向量,是dim维行向量
weight = embd.weight.data[0].numpy()
print("weight: {}".format(weight))

weight_sum = 0
for w in weight:
    weight_sum += w
mean = weight_sum / dim
print("均值: {}".format(mean))

square_sum = 0
for w in weight:
    square_sum += (mean - w) ** 2
print("方差: {}".format(square_sum / dim))

代码输出:

weight: [-0.65507996  0.11627434 -1.6705967  ...  0.78397447  ...  -0.13477565]
均值: 0.0006973597864689242
方差: 1.0019535550544454

二、torch.Tensor、torch.tensor、torch.randn初始化分布

1、torch.rand
返回 [ 0 , 1 ) [0,1) [0,1)上的均匀分布(uniform distribution)。
2、torch.randn
返回 N ( 0 , 1 ) N(0, 1) N(0,1),即标准正态分布(standard normal distribution)。
3、torch.Tensor
torch.Tensor是Tensor class,torch.Tensor(2, 3)是调用Tensor的构造函数,构造了 2 × 3 2\times3 2×3矩阵,但是没有分配空间,未初始化。
不推荐使用torch.Tensor创建Tensor,应使用torch.tenstor、torch.ones、torch.zeros、torch.rand、torch.randn等,原因:

t = torch.Tensor(2,3)
容易出现下述错误,因为t中的值取决当前内存中的随机值
如果当前内存中随机值特别大会溢出
RuntimeError: Overflow when unpacking long

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值