7

TensorFlow のドキュメントを読むと、正方行列のコレスキー分解を計算する方法があることがわかります。ただし、通常、コレスキー分解を使用する場合は、行列の直接反転が不安定になる可能性がある線形システムを解く目的で使用します。

したがって、 Scipyで実装されている方法に似た方法を探しています。これが TensorFlow に存在するかどうか、または組み込む方法があるかどうかは誰にもわかりませんか?

4

2 に答える 2

3

user19..8: 物事を「ほとんど」テンソルフローに保持したい場合、今のところこれを行う方法は、あなたとベルチがコメントで議論していたことを行うことです:線形システムを作成し、結果を feed_dict でフィードバックします。擬似コード:

saved_tensor1 = tf.Variable(...)
saved_tensor2 = tf.Variable(...)

start_of_model...
tensor1, tensor2 = various stuff...
do_save_tensor1 = saved_tensor1.assign(tensor1)
do_save_tensor2 = saved_tensor2.assign(tensor2)
your_cholesky = tf.cholesky(your_other_tensor, ...)

## THIS IS THE SPLIT POINT
# Second half of your model starts here
solved_system = tf.placeholder(...)  # You'll feed this in with feed_dict
final_answer = do_something_with(saved_tensor1, saved_tensor2, solved_system)

次に、すべてを実行するには、次のようにします。

_, _, cho = tf.run([do_save_tensor1, do_save_tensor2, your_cholesky])
solution = ... solve your linear system with scipy ...
feed_dict = {solved_system: solution}
answer = tf.run(final_answer, feed_dict=feed_dict)

ここで重要なのは、後で計算を再開できるように、中間結果を tf.Variables に格納することです。

(tf.choleskyから得られるものがscipyに直接フィードするのに適切な形式であること、または前のステップでマトリックスを引き出してscipyにフィードするだけではいけないとは約束していませんが、これは全体的にワークフローがうまくいくはずです)。

これは、マルチコアまたは GPU 操作を大量に実行し、マトリックスを scipy に吐き出してシリアル化する必要がある場合、パフォーマンスのボトルネックを作成することに注意してください。ただし、設定に大きく依存します。

于 2015-11-14T18:29:11.287 に答える