从零开始深度学习Pytorch笔记——张量的创建(下)

我们介绍了Pytorch中的张量,并且讲述了张量的各种创建方式,本文我们将继续研究Pytorch的更多创建方式。

生成正态分布(高斯分布)数据的张量torch.normal(mean, std, out=None)参数:mean:均值,std:标准差
这种生成正态分布数据的张量创建有4种模式:
(1)mean为张量,std为张量
(2)mean为标量,std为标量
(3)mean为标量,std为张量
(4)mean为张量,std为标量

#mean为张量,std为张量
mean = torch.arange(1,6,dtype=torch.float)
std = torch.arange(1,6,dtype=torch.float)
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

此时的mean和std都是张量,可以理解为其中的-0.6152是mean为1,std为1的正态分布采样得到,其他对应位置数据同理得到,只是从不同的正态分布中采样得到。

#mean为标量,std为标量
t = torch.normal(0.2,1.0,size=(5,))
print(t)

这里生成的数据都是通过mean为0.2,std为1.0采样得到的,长度为5的一维张量。

#mean为标量,std为张量
mean = 2
std = torch.arange(1,4,dtype=torch.float)
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

1.9759是mean为2,std为1的正态分布采样得到,其他对应位置数据同理得到,只是从不同的正态分布中(均值不同,标准差相同)采样得到。

#mean为张量,std为标量
mean = torch.arange(1,4,dtype=torch.float)
std = 2
t = torch.normal(mean,std)
print("mean:{},std:{}".format(mean,std))
print(t)

其中,0.2434是mean为1,std为2的正态分布采样得到,其他对应位置数据同理得到,只是从不同的正态分布中(均值不同,标准差相同)采样得到。
标准正态分布数据的张量标准正态分布指的是:均值为0,标准差为1
torch.randn()
torch.randn(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
size:张量的形状例如创建一个长度为6的标准正态分布张量:torch.randn(6)创建一个二维的标准正态分布张量:torch.randn(3,4)torch.randn_like()可以根据张量的形状创建新的标准正态分布张量
randn_like(input, dtype=None, layout=None, device=None, requires_grad=False)

a = torch.ones((3,4))
t = torch.randn_like(a)
print(t)

创建在 (0,1] 上均匀分布的张量torch.rand()torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
创建一个均匀分布的长度为5的一维张量:torch.rand(5)
创建一个均匀分布的二维张量:torch.rand(3,4)
在区间上创建整数均匀分布数据的张量torch.randint()和torch.randint_like()可以达到这个效果。

torch.randint(low=0, high, size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
在区间[low,high)上生成整数均匀分布数据的张量

例如创建在[2,6)上均匀分布的整数张量,长度为4的一维张量:torch.randint(2, 6, (4,))

生成在[0,9) 上均匀分布的整数张量,二维张量:
torch.randint(9, (3, 2))

生成0~n-1的随机排列一维张量torch.randperm(n, out=None, dtype=torch.int64, layout=torch.strided, device=None, requires_grad=False)
torch.randperm(6)

生成伯努利分布(0-1分布,两点分布)的张量torch.bernoulli(input, *, generator=None, out=None)input:概率值例如先创建一个张量a,作为之后的概率值输入:a = torch.empty(3, 3).uniform_(0, 1)a然后通过a创建张量t:torch.bernoulli(a)#使用上面创建的张量a作为概率值创建伯努利分布

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章