如何在pytorch中创建正态分布

时间:2018-07-02 12:46:08

标签: python statistics pytorch linear-algebra normal-distribution

我想在pytorch中创建随机正态分布,均值和标准差分别为4、0.5。我没有找到相应的API。有谁知道?非常感谢。

6 个答案:

答案 0 :(得分:7)

您可以轻松使用torch.Tensor.normal_()方法。

让我们创建一个维度为1 × 5的矩阵Z(一维张量),其中填充了由mean = 4std = 0.5参数化的正态分布中的随机元素样本。

torch.empty(5).normal_(mean=4,std=0.5)

结果:

tensor([4.1450, 4.0104, 4.0228, 4.4689, 3.7810])

答案 1 :(得分:3)

对于标准正态分布(即mean=0variance=1),您可以使用torch.randn()

对于自定义meanstd,您可以使用torch.distributions.Normal()


  

初始化签名:
  tdist.Normal(loc,scale,validate_args = None)

     

文档字符串:
           创建参数化的正态(也称为高斯)分布       locscale

     

Args:
          loc(浮点数或张量):分布的平均值(通常称为mu)
          标度(浮点或张量):分布的标准偏差               (通常称为sigma)


这是一个例子:

In [32]: import torch.distributions as tdist

In [33]: n = tdist.Normal(torch.tensor([4.0]), torch.tensor([0.5]))

In [34]: n.sample((2,))
Out[34]: 
tensor([[ 3.6577],
        [ 4.7001]])

答案 2 :(得分:1)

您可以像文档中的here所述创建您的发行版。 在您的情况下,这应该是正确的调用,包括从创建的分发中进行采样:

from torch.distributions import normal

m = normal.Normal(4.0, 0.5)
m.sample()

答案 3 :(得分:0)

一个简单的选择是使用基本模块中的randn函数。它根据标准高斯分布创建一个随机样本。要更改均值和标准差,您只需使用加法和乘法。下面,我根据您要求的分布创建了5号样本。

import torch
torch.randn(5) * 0.5 + 4 # tensor([4.1029, 4.5351, 2.8797, 3.1883, 4.3868])

答案 4 :(得分:0)

这取决于您要生成什么。

要生成标准正态分布,请使用-

torch.randn()

用于所有所有分布(例如正态分布,泊松分布或均匀分布等) torch.distributions.Normal()torch.distribution.Uniform()。 所有这些方法的详细信息都可以在这里看到-https://pytorch.org/docs/stable/distributions.html#normal

一旦定义了这些方法,就可以使用.sample方法生成实例数。如果分配参数是批量的,它还允许您生成sample_shape形状的样本或sample_shape形状的样本批。

答案 5 :(得分:0)

有关所有分发,请参见:https://pytorch.org/docs/stable/distributions.html#

点击右键菜单以跳到正常状态(或在文档中搜索)。

示例代码:

import torch

num_samples = 3
Din = 1
mu, std = 0, 1
x = torch.distributions.normal.Normal(loc=mu, scale=std).sample((num_samples, Din))

print(x)

有关火炬分配的详细信息(重点是制服),请参见我的SO解答:https://stackoverflow.com/a/62919760/1601580