pytorch的rand*随机数
torch.rand
torch.rand(*sizes, out=None) → Tensor
返回一个张量,包含了从区间[0,1)的均匀分布中抽取的一组随机数,形状由可变参数sizes
定义。
print(torch.rand(3))
print(torch.rand(3,2))
输出为:
>>
tensor([0.3445, 0.9567, 0.7707])
tensor([[0.7644, 0.5776],
[0.4379, 0.5460],
[0.1860, 0.2946]])
*因为是随机的,所以你我输出结果不一样很正常(这个解释是不是有点多余……)
torch.randn
torch.randn(*sizes, out=None) → Tensor
返回一个张量,包含了从标准正态分布(均值为0,方差为 1,即高斯白噪声)中抽取一组随机数,形状由可变参数sizes
定义。
参数:
- sizes (int…) – 整数序列,定义了输出形状
- out (Tensor, optinal) - 结果张量
print(torch.randn(3))
print(torch.randn(3,2))
>>
tensor([ 0.7186, -1.4286, 0.6510])
tensor([[ 1.1820, -0.4163],
[-1.2188, 1.3141],
[ 0.9691, 0.2682]])
torch.randperm
torch.randperm(n, out=None) → LongTensor
给定参数n
,返回一个从[0, n -1) 的随机整数排列。
参数:
- n (int) – 上边界(不包含)
print(torch.randperm(10))
>>
tensor([2, 4, 8, 5, 0, 9, 6, 1, 7, 3])
可以回想一下range或者arrange。他们俩是返回有序的数列并且可以设定步长,官方建议是使用函数 torch.arange()
。
介绍完上边的rand*函数再介绍一个torch.normal()
torch.normal()
torch.normal(means, std, out=None)
返回一个张量,包含从给定参数means
,std
的离散正态分布中抽取随机数。 均值means
是一个张量,包含每个输出元素相关的正态分布的均值。 std
是一个张量,包含每个输出元素相关的正态分布的标准差。 均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
参数:
- means (Tensor) – 均值
- std (Tensor) – 标准差
- out (Tensor) – 可选的输出张量
randn和normal的区别
虽然randn和normal都可以生成服从正态分布的随机数,但是normal可以自己设定均值和标准差。
就这点区别。
torch.Tensor.uniform_()
返回一个浮点数 N,取值范围为如果 x<y 则 x <= N <= y,如果 y<x 则y <= N <= x.
比如:
a = torch.Tensor(2,3).uniform_(5,6)
b = torch.zeros(2,3).uniform_(5,6)
c = torch.ones(2,3).uniform_(5,6)
print(a,b,c,sep="\n")
三种都是,生成一个2×3的张量,将其中的值改为5-6之间的浮点数。
>>
tensor([[5.5388, 5.6403, 5.2553],
[5.0379, 5.8440, 5.0334]])
tensor([[5.0001, 5.2357, 5.4277],
[5.9316, 5.4877, 5.3986]])
tensor([[5.4156, 5.6199, 5.4743],
[5.4273, 5.4571, 5.6763]])
torch.rand和torch.Tensor.uniform_
这样看到话,两个都能取0-1之间的均匀分布,但是问题在于rand取不到1,uniform_可以取到1。