我使用tf.linalg.det
,并且我使用tf.train.GradientDescentOptimizer
优化了一项功能。当我尽量减少损失时,我得到一个错误:
Input is not invertible.[[Node:
gradients_14/MatrixDeterminant_14_grad/MatrixInverse =
MatrixInverse[T=DT_FLOAT, adjoint=true,
_device="/job:localhost/replica:0/task:0/device:CPU:0"]
(TensorArrayStack_14/TensorArrayGatherV3)]]
以下是我计算行列式的样本矩阵:
cov_mat = [[24133534. 15928681. 18767914. 12779963.]
[15928681. 22415040. 16570539. 13000952.]
[18767914. 16570539. 21845432. 12702288.]
[12779963. 13000952. 12702288. 24759624.]]
当我尝试使用numpy找到反向时:
inv_matrix = np.linalg.inv(cov_mat)
我得到了
inv_matrix = [[ 1.3129764e-07 -1.9006050e-08 -9.2320363e-08 -1.0428365e-08]
[-1.9006050e-08 1.1152212e-07 -5.6890045e-08 -1.9562632e-08]
[-9.2320363e-08 -5.6890045e-08 1.7552667e-07 -1.2525011e-08]
[-1.0428365e-08 -1.9562632e-08 -1.2525011e-08 6.2468771e-08]]
在numpy中将逆矩阵乘以原始矩阵,我得到了一个接近单位矩阵的东西:
np.dot(cov_mat,inv_matrix)) =
[[ 1.0000001e+00 -1.2194361e-07 7.6666574e-08 4.2256303e-08]
[ 5.1060049e-08 9.9999994e-01 1.6705408e-07 4.1031740e-08]
[ 9.1811515e-08 -9.5680974e-08 1.0000004e+00 1.5748128e-08]
[-1.8350470e-08 1.3953368e-08 1.4236801e-07 1.0000000e+00]]
任何人都可以告诉我为什么张量流不能计算梯度?</ p>
编辑:所以我发现如果我只运行一次迭代的优化器,我得到一个渐变,但是如果我运行优化器超过1次迭代,我得到不可逆矩阵错误。