如何在pytorch中处理运行时错误时向量化矩阵求逆

问题描述 投票:0回答:1

我需要在pytorch中反转一些矩阵。但是,某些矩阵是不可逆的,这导致代码抛出运行时错误,如下所示,

matrices = torch.randn([5,3,3])
matrices[[2,3]] = torch.zeros([3,3])
inverses = torch.inverse(matrices)

RuntimeError: inverse_cpu: For batch 2: U(1,1) is zero, singular U.

我在这种情况下有一个后备技术。但是,我无法弄清楚哪个矩阵会引发错误。目前,我已用非向量化版本替换了代码,但它已成为瓶颈。

有没有一种方法可以在不放弃向量化的情况下进行处理?

pytorch vectorization matrix-inverse
1个回答
0
投票

我能想到的最好的方法是,首先计算每个矩阵的确定性,然后计算具有abs(det)>0的矩阵的逆。

matrices = torch.randn([5,3,3])
matrices[[2,3]] = torch.zeros([3,3])
determinants = torch.det(matrices)
inverses = torch.inverse(matrices[determinants.abs()>0.])

您将不得不处理奇异矩阵的删除,但这应该不会太困难,因为您具有determinants.abs()==0.中这些矩阵的索引值。这使您可以将反演保持向量化。

© www.soinside.com 2019 - 2024. All rights reserved.