我想创建一个具有给定均值和标准差的随机正态分布。
1 × 5
的矩阵Z(一个1d张量),其中填充了从正态分布中参数化为mean = 4
和std = 0.5
的随机元素样本。torch.empty(5).normal_(mean=4,std=0.5)
结果:
tensor([4.1450, 4.0104, 4.0228, 4.4689, 3.7810])
(tensor(4.0856), tensor(0.2514))
?难道标准差不应该接近于0.5吗? - muammar对于标准正态分布(即mean = 0
和variance = 1
),您可以使用torch.randn()
对于自定义均值mean
和标准差std
的情况,您可以使用torch.distributions.Normal()
初始化签名:
tdist.Normal(loc, scale, validate_args=None)文档字符串:
创建一个由loc
和scale
参数化的正态分布。参数:
loc(float或Tensor):分布的均值(通常称为mu)
scale(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]])
randn
函数。它从标准高斯分布中创建一个随机样本。要改变均值和标准差,只需使用加法和乘法。下面我从您请求的分布中创建大小为5的样本。import torch
torch.randn(5) * 0.5 + 4 # tensor([4.1029, 4.5351, 2.8797, 3.1883, 4.3868])
rand
函数确实从均匀分布中采样,但randn
函数从高斯分布中采样https://pytorch.org/docs/stable/torch.html#torch.randn。乘以标准差并加上平均值是标准统计实践。 - gui11aume查看所有分发版本请访问: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)
这取决于您想要生成什么。
如果要生成标准正态分布,请使用 -
torch.randn()
对于所有分布(例如正态分布,泊松分布或均匀分布等),使用 torch.distributions.Normal()
或 torch.distributions.Uniform()
。这些方法的详细信息可以在此处查看 - https://pytorch.org/docs/stable/distributions.html#normal
一旦定义了这些方法,就可以使用 .sample 方法生成实例数量。如果分布参数进行了批处理,则还允许您生成样本形状的样本或样本形状的批次。
r2 = torch.torch.distributions.Uniform(low=lb, high=ub).sample((num_samples,Din))
的操作):https://pytorch.org/docs/stable/distributions.html#torch.distributions.uniform.Uniform - Charlie Parker