使用Gradient Descent Optimizer时,Tensorflow无法反转矩阵

时间:2018-03-07 21:40:14

标签: python numpy tensorflow

我使用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次迭代,我得到不可逆矩阵错误。

0 个答案:

没有答案