通过阅读TensorFlow文档,我看到有一种方法可以计算方阵的Cholesky分解.但是,通常当我想使用Cholesky分解时,我这样做的目的是求解直接矩阵求逆可能不稳定的线性系统.
因此,我正在寻找一种类似于Scipy中实现的方法.有没有人知道TensorFlow中是否存在这种情况,或者是否存在可以合并的方式?
user19..8:如果您想将事情“主要”保留在张量流中,那么现在执行此操作的方法是执行您和 Berci 在评论中讨论的操作:运行张量流图,直到您需要解决以下问题线性系统,然后用 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)
Run Code Online (Sandbox Code Playgroud)
然后要运行整个过程,请执行以下操作:
_, _, 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)
Run Code Online (Sandbox Code Playgroud)
这里的关键是将中间结果存储在 tf.Variables 中,以便您可以在之后恢复计算。
(我并不保证您从 tf.cholesky 中得到的内容能够以正确的格式直接提供给 scipy,或者您不应该在前面的步骤中取出矩阵并将其提供给 scipy,但总的来说工作流程应该适合您)。
请注意,如果您正在进行大量的多核或 GPU 操作,然后必须在将矩阵吐出到 scipy 时进行序列化,这将产生性能瓶颈,但它也可能很好 - 很大程度上取决于您的设置。
| 归档时间: |
|
| 查看次数: |
2096 次 |
| 最近记录: |