我正在寻找一种在tensorflow中替代numpy.linalg.pinv。 到目前为止,我发现tensorflow只有tf.matrix_inverse(input, adjoint=None, name=None)
,如果矩阵不可逆,它将引发错误。tensorflow中的numpy.linalg.pinv的替代
回答
我不知道numpy.linalg.pinv在tensorflow中的替代品,但正则化是在矩阵不可逆时的替代方案。一个例子:
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)
其中c是常数,并且应该是很小的例如c = 0.000001
然而矩阵求逆是相当昂贵的计算,只应如果neccesary完成。欲了解更多信息,请参阅:do not invert that matrix
如果OP有扩展最终评论他们可以按照'x←pinv(A)@ b'(OP暗示的路线)或(根据你的建议)找到'x',他们可以按如下方式进行:'b ^←AT @ b','A ^←AT @ A'并使用例如LU分解,线性系统_'A^x = b ^'_ – gboffi
您可以numpy
的pseudo-inverse的tensorflow
的tf.py_func组合如下:
return tf.py_func(np.linalg.pinv, [input], tf.float32)
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)))
+1,这应该是被接受的答案。但是,也许让'b'可选?除了计算A + * b之外,用户可能需要伪逆来达到其他目的。 – MiniQuark
- 1. Python的Tensorflow运行在GPU代替CPU
- 2. 用1s代替零的Tensorflow填充
- 3. Tensorflow版本0.12中的tf.Variable.ref()的替代方法是什么?
- 4. 在tensorflow中numpy.newaxis的替代方法是什么?
- 5. TensorFlow中C代码的代码完成
- 6. Tensorflow basic_rnn_seq2seq TypeError:预期的int32,得到类型'浮动'-0.1代替
- 7. 在TensorFlow中可以用默认的softmax替代默认的softmax吗?
- 8. JavaScript中的替代
- 9. 哪里是Tensorflow中adadelta的源代码?
- 10. 如何迭代tensorflow中的张量?
- 11. 如何分离TensorBoard中的TensorFlow代码?
- 12. tensorflow softmax_cross_entropy代码
- 13. nodejs中的域的替代
- 14. 代替替换文本的Python中
- 15. Tensorflow中的InvalidArgumentError
- 16. Python中的Tensorflow
- 17. 替代SQL中的“循环”?
- 18. Java中的PostMessage()替代(Android)
- 19. 替代Swift中的NSOrderedSet?
- 20. 替代wp-admin中的update_option()
- 21. 替代WPF中的MDI?
- 22. CurrencyManager在vb.NET中的替代?
- 23. 替代sybase中的dense_rank ASE
- 24. 替代jQuery中的.change。
- 25. asp.net中的observablecollection替代mvc
- 26. MoTeilla中的InnerText替代
- 27. 替代WP7中的System.Net.Icertificatepolicy
- 28. WBR在XHTML中的替代
- 29. Python中的开关替代
- 30. 替代Android中的AbsoluteLayout?
如果矩阵不可逆,您可以选择使用正则化。 –
@NikolasRieble,请提供示例 – Rahul
'pinv()'基于SVD,而Tensorflow具有SVD功能......我不打算提供示例:) – gboffi