python:自写的计算行列式的函数单独运行没有问题,在整个程序中运行出现错误。

我使用pytorch创建我的模型,模型的最后需要计算半正定矩阵的行列式(半正定矩阵的所有主子式都为非负),因为pytorch并不提供行列式计算函数(又不能将需要求导的tensor转成numpy),因此我写了一个行列式的计算函数:

 def det(m):
     if len(m) <= 0:
         return None
     elif len(m) == 1:
         return m[0][0]
     else:
         s = 0
         for i in range(len(m)):
             n = [[row[a] for a in range(len(m)) if a != i] for row in m[1:]] 
             x += m[0][i] * det(n) * (-1) ** (i % 2)
         return s

此函数单独执行的时候没有问题,但是我在训练到大约第3,4epoch的时候,他会将一个半正定矩阵的行列式输出为负,如果单独将这个半正定矩阵从错误信息里拿出来单独使用这个函数运行就不会出现负值:图片说明
我试验过很多次,当前计算行列式的函数单独运行的时候不会出现错误

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^