如何使用张量定义正态分布?

How to define a normal distribution using tensors?

我想用均值 [0, 0, 0, 0] 和方差 - 协方差矩阵定义多元正态分布,对角线上只有一个。我的代码是:

import torch
import torch.distributions as td
td.Normal(loc=torch.tensor(np.zeros(4)), scale=torch.tensor(np.diag(np.repeat(1, 4)), dtype = float)) 

但是我得到值错误:

ValueError: The parameter scale has invalid values

我应该怎么做才能正确定义?

torch.distributions.Normal 单变量 正态分布。它通过将结果计算为单变量分布数组(使用广播)来处理张量参数。

例如,在下面,normal 实现了两个单变量正态分布,一个均值为 0,标准差为 0。 dev 1,另一个均值为 9 和 std。开发者0.25:

In [89]: normal = td.Normal(loc=torch.tensor([0.0, 9.0]),
    ...:                    scale=torch.tensor([1, 0.25]))

从每个分布中抽取 5 个样本:

In [90]: normal.rsample(sample_shape=[5])
Out[90]: 
tensor([[ 0.2460,  8.6748],
        [-0.8655,  9.0666],
        [ 0.6386,  8.7980],
        [ 0.5817,  9.1428],
        [-0.1418,  8.5777]], dtype=torch.float64)

对于多元正态分布,使用torch.distributions.multivariate_normal.MultivariateNormal

例如,

In [98]: mvn = td.multivariate_normal.MultivariateNormal(
    ...:     loc=torch.zeros(4, dtype=torch.float64),
    ...:     covariance_matrix=torch.eye(4, dtype=torch.float64))

In [99]: mvn.rsample([5])
Out[99]: 
tensor([[ 0.6445,  1.3138, -2.1718,  1.1653],
        [-1.7391, -1.0428,  0.3636,  0.1957],
        [ 1.9167, -0.2738, -0.1590,  0.7170],
        [ 0.0691, -0.5422,  1.8694,  0.7470],
        [ 0.3545,  1.0585, -0.1825, -1.9955]], dtype=torch.float64)