我正在尋找一種在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. 替代在tensorflow
- 2. 用1s代替零的Tensorflow填充
- 3. Python的Tensorflow運行在GPU代替CPU
- 4. Tensorflow版本0.12中的tf.Variable.ref()的替代方法是什麼?
- 5. 在tensorflow中numpy.newaxis的替代方法是什麼?
- 6. TensorFlow中C代碼的代碼完成
- 7. Tensorflow basic_rnn_seq2seq TypeError:預期的int32,得到類型'浮動'-0.1代替
- 8. 在TensorFlow中可以用默認的softmax替代默認的softmax嗎?
- 9. 什麼是TensorFlow的時代?
- 10. 如何分離TensorBoard中的TensorFlow代碼?
- 11. 哪裏是Tensorflow中adadelta的源代碼?
- 12. 如何迭代tensorflow中的張量?
- 13. 替代Prolog中的\ +?
- 14. JavaScript中的替代
- 15. tensorflow softmax_cross_entropy代碼
- 16. nodejs中的域的替代
- 17. mysqli中的mysql_field_name的替代
- 18. jpa中的@formula的替代
- 19. iOS中的ArrayList的替代?
- 20. Python中的Tensorflow
- 21. Tensorflow中的InvalidArgumentError
- 22. 迭代通過tensorflow
- 23. 代替替換文本的Python中
- 24. Tensorflow numpy的,以tensorflow
- 25. 替代MVC中的'Session_Start'6
- 26. 替代InetAddress類中的isReachable
- 27. 替代WPF中的MDI?
- 28. 新API中的MultipleTextOutputFormat替代
- 29. mac中的glaux替代品
- 30. 替代Android中的AbsoluteLayout?
如果矩陣不可逆,您可以選擇使用正則化。 –
@NikolasRieble,請提供示例 – Rahul
'pinv()'基於SVD,而Tensorflow具有SVD功能......我不打算提供示例:) – gboffi