【发布时间】:2017-11-27 00:14:35
【问题描述】:
我有一个 71*71 的有限 float64 矩阵,摘录如下。 numpy.linalg.inv 可以反转该矩阵,但 tensorflow.matrix_inverse 会出现此错误:
InvalidArgumentError(参见上面的回溯):输入不是 可逆的。 [[节点:MatrixInverse_1 = MatrixInverseT=DT_FLOAT, 伴随=假, _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]
【问题讨论】:
-
您要求我们查看的这些数字是什么?这看起来不像 71 x 71 阵列?
-
是的,这不是全部,因为它很大。它只是一排。只是为了让人们不要求提供数据。它只是一堆浮点数,numpy可以处理它。
-
你的矩阵是可逆的吗? stackoverflow.com/q/41841509/1140684
-
很可能你的矩阵有一个病态的前导块,
tf.matrix_inverse无法消除(因为它只使用部分旋转)但可以被np.linalg.inv消除(我认为使用全旋转)。这并不意味着np.linlag.inv给了你一个很好的逆向——事实上这不太可能。如果是M = tf.matmul(XT, X).eval(),检查np.dot(np.linalg.inv(M), M),看看你是否得到了接近单位矩阵的东西。 -
或者只是检查
np.linalg.cond(M)- 如果它是一个高得离谱的数字,即使np.linalg.inv吐出一些东西,你也永远不会得到一个有用的逆。跨度>
标签: numpy tensorflow