我有一个71*71的有限float64矩阵,以下是其中一部分。numpy.linalg.inv可以反转该矩阵,但tensorflow.matrix_inverse会出现以下错误:
InvalidArgumentError(请参见上面的traceback):输入无法反转。[[Node:MatrixInverse_1 = MatrixInverseT = DT_FLOAT,adjoint = false,_device =“/ job:localhost / replica:0 / task:0 / cpu:0”]]
此外,我可以使用张量的评估通过numpy反转它
有人有解决方案吗?
InvalidArgumentError(请参见上面的traceback):输入无法反转。[[Node:MatrixInverse_1 = MatrixInverseT = DT_FLOAT,adjoint = false,_device =“/ job:localhost / replica:0 / task:0 / cpu:0”]]
此外,我可以使用张量的评估通过numpy反转它
np.linalg.inv(tf.matmul(XT,X).eval())
,因此似乎不是数据问题。有人有解决方案吗?
[ -7.63790894 -5.08866978 -6.6209259 483.20855713
784.34204102 783.43835449 73.17279053 74.09223938
450.47570801 769.8269043 774.1385498 -14.69404697
-13.21867657 812.33081055 811.70593262 -3.88607216
-5.75979233 3.88607216 5.75979233 -7.88097668 34.2455864
36.57875061 19.74640274 710.11187744 698.85675049
669.33203125 2.1271162 17.33749199 19.96108818
902.21704102 902.27490234 902.23791504 902.22412109
902.28668213 902.18884277 902.15979004 902.18945312
902.13446045 902.12585449 902.11260986 902.16412354
902.14099121 902.1932373 902.18847656 902.07629395
-12.97049141 -22.87892342 -13.85427094 902.24389648
-2.24357224 -12.29811287 -12.03248596 -2.06928253
-21.78663063 -18.63744736 -10.67835236 901.97436523
33.95432281 36.67951584 19.38583755 144.95518494
156.08990479 137.80636597 902.09393311 236.29612732
902.21704102 902.15979004 902.215271 297.27478027
146.19558716 22.00869942]
tf.matrix_inverse
无法消除它(因为它仅使用部分主元消元),但可以用np.linalg.inv
消除它(因为我认为它使用全主元消元)。这并不意味着np.linlag.inv
给出了一个好的逆矩阵 - 实际上这是相当不可能的。如果M = tf.matmul(XT, X).eval()
,检查np.dot(np.linalg.inv(M), M)
并看看是否得到接近单位矩阵的结果。 - Daniel Fnp.linalg.cond(M)
- 如果它是一个非常高的数字,即使np.linalg.inv
输出了一些东西,你也永远不会得到一个有用的逆。 - Daniel F