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

浏览: 4545

在该系列的上一篇:从零开始深度学习Pytorch笔记(2)——张量的创建(上)我们介绍了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(26, (4,))

生成在[0,9) 上均匀分布的整数张量,二维张量:

torch.randint(9, (32))

生成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(33).uniform_(01)
a

然后通过a创建张量t:

torch.bernoulli(a)#使用上面创建的张量a作为概率值创建伯努利分布

扫码下图关注我们不会让你失望!

image.png

推荐 0
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册