【问题标题】:How do you generate positive definite matrix in pytorch?你如何在pytorch中生成正定矩阵?
【发布时间】:2020-01-30 06:09:23
【问题描述】:

我正在尝试使用随机生成的协方差矩阵定义多元高斯分布:

psi = torch.zeros(512).normal_(0., 1.).requires_grad_(True)

# Generate random matrix
Sigma_k = torch.rand(512, 512)
# Make it symmetric positive
Sigma_k = Sigma_k * Sigma_k.t()
# Make it definite
Sigma_k.add_(0.001, torch.eye(512)).requires_grad_(True)

multivariate_normal.MultivariateNormal(psi, Sigma_k)

但我最终得到了一个例外:

RuntimeError:potrf 中的 Lapack 错误:在 /Users/soumith/mc3build/conda-bld/pytorch_1549597882250/work/aten/src/TH/generic/THTensorLapack.cpp:658

生成正定方阵的正确方法是什么?

【问题讨论】:

标签: pytorch


【解决方案1】:

在“确定”中

tensor.add() 不会更改 tensor,而只会返回更改后的版本。 你想用tensor.add_()

【讨论】:

  • 是的,是印刷错误。虽然,它并没有解决最初的问题。
【解决方案2】:

答案是应该对矩阵A 和它的转置矩阵 (A.t()) 进行点积,以获得半正定矩阵。最后一件事是确保它是确定的(严格大于零)。

使用 Pytorch:

Sigma_k = torch.rand(512, 512)
Sigma_k = torch.mm(Sigma_k, Sigma_k.t())
Sigma_k.add_(torch.eye(512))

正式算法描述here

【讨论】:

  • 是否还有一种简单的方法来测试矩阵是否确实是对称的和半正定的?
  • 我想如果你按照步骤它基本上描述了正定矩阵的定义。
猜你喜欢
  • 2012-09-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2020-10-13
相关资源
最近更新 更多