深圳幻海软件技术有限公司 欢迎您!

PyTorch常用五个抽样函数

2023-02-28

PyTorch是一个开源的深度学习框架,它提供了一个用于高级特性的Python包。在本文中,我们将介绍PyTorch中的常见抽样函数。抽样是一个统计过程,它从总体中提取一个子集,通过子集来研究整个总体。torch.bernoulli()伯努利分布是一个离散分布,有两个结果,即成功和失败。如果成功的概

PyTorch是一个开源的深度学习框架,它提供了一个用于高级特性的Python包。在本文中,我们将介绍PyTorch中的常见抽样函数。抽样是一个统计过程,它从总体中提取一个子集,通过子集来研究整个总体。

torch.bernoulli()

伯努利分布是一个离散分布,有两个结果,即成功和失败。如果成功的概率是p,那么失败的概率是(1-p),反之亦然。

PyTorch的实现和相应的输出如下:

a = torch.empty(3, 3).uniform_(0, 1)
 print(a)
  • 1.
  • 2.

输出如下:

tensor([[0.0966, 0.7385, 0.6546],
        [0.4255, 0.8294, 0.8315],
        [0.8065, 0.8228, 0.6467]])
  • 1.
  • 2.
  • 3.

现在我们把bernoulli()函数应用到张量上

torch.bernoulli(a)
  • 1.

输出如下:

tensor([[0., 1., 1.],
        [1., 1., 0.],
        [1., 0., 1.]])
  • 1.
  • 2.
  • 3.

torch.Tensor.cauchy_()

柯西分布,又称柯西-洛伦兹分布,在统计学中,具有两个参数的连续分布函数,最早于19世纪初由法国数学家奥古斯丁-路易斯·柯西研究。后来,19世纪的荷兰物理学家亨德里克·洛伦兹(Hendrik Lorentz)用它来解释强迫共振或振动。第一眼看柯西分布看起来像正态分布,但它的“尾巴”并不像正态分布那样迅速逐渐消失。

柯西分布可能看起来类似于正态分布,它的峰值比高斯分布高,与正态分布不同的是,它的尾部衰减得更慢。

a = torch.ones(3, 3)
 a
  • 1.
  • 2.

输出:

tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]])
  • 1.
  • 2.
  • 3.

现在我们应用cauchy_()函数

torch.Tensor.cauchy_(a)
  • 1.

输出:

tensor([[-4.5374, 0.3726, 0.4947],
        [ 0.4111, 0.9167, 0.7214],
        [ 1.0533, -9.2247, 0.7620]])
  • 1.
  • 2.
  • 3.

注意,这里的函数名称以"_"结尾,这是pytorch的一个规定,他将会用改写参数,也就是我们传进去的变量a

torch.poisson ()

泊松分布用于计算一个事件在平均价值率(时间)的一定时间内发生的可能性。泊松分布是一个离散的概率分布。

 a = torch.rand(4, 4) * 5 # rate parameter between 0 and 5
 torch.poisson(a)
  • 1.
  • 2.

输出如下:

 tensor([[2., 1., 0., 8.],
        [2., 3., 3., 3.],
        [0., 0., 1., 6.],
        [0., 5., 3., 3.]])
  • 1.
  • 2.
  • 3.
  • 4.

torch.normal ()

正态分布,又称高斯分布,是独立随机变量的连续分布函数。该分布有一个钟形曲线,其特征有两个参数:均值,即图型上的最大值,图总是对称的;还有标准差,它决定了离均值的差值。

torch.normal(mean=torch.arange(1., 11.), std=torch.arange(1, 0, -0.1))
  • 1.

输出如下:

 tensor([-0.6932, 2.3833, 2.3547, 3.8103, 5.4436, 5.8295, 7.5898, 8.4793,
          9.1938, 10.0637])
  • 1.
  • 2.

torch.rand ()

PyTorch torch.randn()返回一个由可变参数大小(定义输出张量形状的整数序列)定义的张量,包含来自标准正态分布的随机数。

标准正态分布,也称为z分布,是一种特殊的正态分布,其均值为0,标准差为1

 torch.randn(4,4)
  • 1.

输出如下:

 tensor([[-1.3119, -0.2177, -0.2496, 0.2361],
        [-1.2755, -0.2271, 1.5297, 0.6433],
        [-0.4198, -0.9269, -0.6260, -0.9713],
        [ 0.6730, -1.2400, 2.1338, 0.2051]])
  • 1.
  • 2.
  • 3.
  • 4.