写在前面:
这篇博文是一个pytorch初学者整理的第二篇笔记,关于pytorch中的随机初始化方法及其代码示例的内容,如有不对还请大家批评指正。
注意:
代码中的# In
# In
是输入的代码;
代码中的# Out
# Out
是输出的结果,只是为了方便展示,写在了一起。
目录
1.rand/rand_like, randint
rand会随机产生0~1之间的数值,均匀采样出来,不包括1;
# In
torch.rand(3, 3) # 3, 3 表示规格大小
# Out
tensor([[0.1489, 0.3039, 0.0103],
[0.7305, 0.6398, 0.1361],
[0.0675, 0.8197, 0.0676]])
# In
a = torch.rand(3, 3)
# In
torch.rand_like(a) # *_like的方法
# Out
tensor([[0.1823, 0.2776, 0.3376],
[0.2285, 0.7772, 0.9575],
[0.6914, 0.4166, 0.2171]])
# In
torch.randint(1, 10, [3, 3]) # 1, 10表示采样的区间[min, max);[3, 3]表示规格大小
# Out
tensor([[8, 4, 2],
[1, 2, 7],
[3, 6, 2]])
# 注意randint只能采样整数,要想均匀0~10的tensor
# 要用x=10*torch.rand(d1, d2),其中d1, d2表示规格大小
2.randn(正态分布)
(1)N(0,1)标准正态分布
# In
torch.randn(3, 3) # 3, 3 表示规格大小
# Out
tensor([[-0.7416, -1.7052, -0.1960],
[0.9920, 0.4750, 0.7747],
[-0.3542, 0.3421, 0.5126]])
(2)自定义均值和方差
# 注意,这种方法要先把打平成一个列表,一维数据,用full产生10个均值都是0的列表,再用arange产生10个等差为0.1的方差列表
# In
torch.normal(mean=torch.full([10], 0), std=torch.arange(1, 0, -0.1))
# Out
tensor([-1.7226, 1.0137, 0.7108, -0.4316, 0.4672, -0.4014, 0.5015, 0.0034, 0.2689, -0.1069])
# 产生的列表在reshape一下即可
3.full
产生同样元素的tensor
# In
torch.full([2, 3], 7)
# Out
tensor([[7., 7., 7.],
[7., 7., 7.,]])
# In
torch.full([], 7) # 产生一个标量
# Out
tensor(7.)
# In
torch.full([1], 7) # 产生一个1维tensor
# Out
tensor([7.])
4.arange/range
生成等差数列(建议使用arange,不要使用range)
# In
torch.arange(0, 10, 2) # 2代表等差值,产生范围是0~10,但不包含10
# Out
tensor([0, 2, 4, 6, 8])
5.linspace/logspace
注意:
(1)与arange的区别,第三个参数steps表示数量而不是等差值,并且前面的范围包括两个区间的端点值;
(2)logspace的base参数可以设置为2, 10, e等底数,默认为10。
上图第三个例子产生的结果是以10为底数,指数为-1~0进行10等分以后的数值的最终结果。
6.ones/zeros/eye
eye是单位矩阵;
torch.ones(3, 3) # 3, 3表示规格大小
torch.zeros(3, 3)
torch.eye(3)
torch.ones_like(a) # *_like的方法
# In
torch.eye(3)
# Out
tensor([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])