1. torch.rand
torch.rand(*sizes, out=None) → Tensor
返回一个张量,服从区间[0, 1)的均匀分布,形状由参数sizes定义。
torch.rand(4)
torch.rand(2, 3)
2. torch.randn
torch.randn(*sizes, out=None) → Tensor
返回一个张量(高斯白噪声),服从均值为0,方差为1的标准正太分布,形状由参数sizes定义。
torch.randn(5)
torch.randn(2,4)
3、torch.normal
3.1 torch.normal(means, std, out=None) 注意:没有size参数
返回一个张量,服从指定均值和标准差的正太分布。这个函数稍微有点难理解,
均值means是一个张量,包含每个输出元素相关的正态分布的均值。
标准差std是一个张量,包含每个输出元素相关的正态分布的标准差。
均值和标准差的形状不须匹配,但每个张量的元素个数须相同。
单看上面这个解释稍微有点乱,可分以下几种情况理解:
torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
随机返回值:tensor([0.8093, 1.4080, 4.1802, 3.6854, 5.4007, 5.5166, 7.3207, 8.0814, 9.2593, 9.7214])
0.8093 # 是从均值为1,标准差为1的正态分布中随机生成的
1.4080 # 是从均值为2,标准差为0.9的正态分布中随机生成的
4.1802 # 是从均值为3,标准差为0.8的正态分布中随机生成的
以此类推......10个元素分别服从不同的相互独立的正态分布。
torch.arange(1., 11.)产生的元素个数为10个(1和11后面必须带浮点".",否则会报错),torch.arange(1, 0, -0.1)产生的元素个数为10个,因此均值和标准差的元素个数必须相同。且mean和std必须为float类型,否则会报错。
torch.normal(mean=0.5, std=torch.arange(1., 6.))
从共享均值的5个正太分布中随机产生5个数。
torch.normal(mean=torch.arange(1., 6.), std=1.0)
从共享标准差的5个正太分布中随机产生5个数。
3.2 torch.normal(mean, std, size, *, out=None) 注意:有size参数
torch.normal(2, 3, size=(1, 4))
产生的所有的数服从均值为2,方差为3的正太分布,形状为(1, 4)。
4. torch.linspace
torch.linspace(start, end, steps=100, out=None) → Tensor
返回一个1维张量,包含在区间start和end上均匀间隔的steps个点。
torch.linspace(1, 10, steps=5)
5. torch.manual_seed()
固定随机种子,接下来生成的随机数序列都是相同的,仅作用于最接近的那句随机数产生语句。
torch.manual_seed(1)
temp1 = torch.rand(5) # tensor([0.7576, 0.2793, 0.4031, 0.7347, 0.0293])
torch.manual_seed(1)
temp2 = torch.rand(5) # tensor([0.7576, 0.2793, 0.4031, 0.7347, 0.0293])
temp3 = torch.rand(5) # tensor([0.7999, 0.3971, 0.7544, 0.5695, 0.4388])
上述temp1和temp2是相同的,temp3是不同的,因为seed仅作用于最接近的那句随机数产生语句。
torch中torch.seed()没有参数,用来将随机数的种子设置为随机数,一般不使用。
6. torch.ones()、torch.zeros()、torch.eye
torch.zeros(5)
torch.zeros(2, 3)
torch.ones(5)
torch.ones(2, 3)
torch.eye(3)