Rah*_*hul 4 python numpy python-3.x tensorflow
我正在寻找tensorflow中numpy.linalg.pinv的替代方案.到目前为止,我发现tf.matrix_inverse(input, adjoint=None, name=None)如果矩阵不可逆,张量流只会引发错误.
TensorFlow提供了一个SVD操作,因此您可以非常容易地计算伪逆:
def pinv(A, b, reltol=1e-6):
# Compute the SVD of the input matrix A
s, u, v = tf.svd(A)
# Invert s, clear entries lower than reltol*s[0].
atol = tf.reduce_max(s) * reltol
s = tf.boolean_mask(s, s > atol)
s_inv = tf.diag(tf.concat([1. / s, tf.zeros([tf.size(b) - tf.size(s)])], 0))
# Compute v * s_inv * u_t * b from the left to avoid forming large intermediate matrices.
return tf.matmul(v, tf.matmul(s_inv, tf.matmul(u, tf.reshape(b, [-1, 1]), transpose_a=True)))
Run Code Online (Sandbox Code Playgroud)
我不知道张量流中的 numpy.linalg.pinv 替代方案,但正则化是矩阵不可逆的替代方案。一个例子:
try:
result = tf.matrix_inverse(input, adjoint=None, name=None)
except:
input += np.identity((input.shape))* c
result = tf.matrix_inverse(input, adjoint=None, name=None)
Run Code Online (Sandbox Code Playgroud)
其中 c 是常数并且应该非常小,例如 c = 0.000001
然而,矩阵求逆的计算量相当大,只有在必要时才应该进行。有关详细信息,请参阅:不要反转该矩阵
| 归档时间: |
|
| 查看次数: |
3044 次 |
| 最近记录: |