如何使用张量定义正态分布?
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)
我想用均值 [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)