如何在pytorch中创建正态分布

dq.*_*hen 10 python statistics normal-distribution linear-algebra pytorch

我想在pytorch中创建一个随机正态分布,mean和std分别为4,0.5.我找不到它的API.有谁知道?非常感谢.

gui*_*ume 7

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

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

  • 你好,@gui11aume,非常感谢你。我意识到我没有注意到这两个是两个不同的函数 - rand 和 randN。 (2认同)

kma*_*o23 5

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

对于custom meanstd,您可以使用torch.distributions.Normal()


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

Docstring:
创建由loc和参数化的正态分布(也称为高斯分布) scale

Args:
loc(浮点或张量):分布的平均值(通常称为mu)
刻度(float或Tensor):分布的标准偏差(通常称为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]])
Run Code Online (Sandbox Code Playgroud)


小智 5

You can easily use torch.Tensor.normal_() method.

Let's create a matrix Z (a 1d tensor) of dimension 1 × 5, filled with random elements samples from the normal distribution parameterized by mean = 4 and std = 0.5.

torch.empty(5).normal_(mean=4,std=0.5)
Run Code Online (Sandbox Code Playgroud)

Result:

tensor([4.1450, 4.0104, 4.0228, 4.4689, 3.7810])
Run Code Online (Sandbox Code Playgroud)


M. *_*ers 2

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

from torch.distributions import normal

m = normal.Normal(4.0, 0.5)
s = m.sample()
Run Code Online (Sandbox Code Playgroud)

如果您想获得特定大小/形状的样本,您可以将其传递给sample(),例如

s = m.sample([5, 5])
Run Code Online (Sandbox Code Playgroud)

对于 5x5 张量。