gpt4 book ai didi

python - TensorFlow 中的 Cholesky 因子分化

转载 作者:太空狗 更新时间:2023-10-30 02:58:26 30 4
gpt4 key购买 nike

我想获得 tf.cholesky 相对于其输入的梯度。目前,tf.cholesky 没有注册梯度:

LookupError: No gradient defined for operation 'Cholesky' (op type: Cholesky)

用于生成此错误的代码是:

import tensorflow as tf
A = tf.diag(tf.ones([3]))
chol = tf.cholesky(A)
cholgrad = tf.gradients(chol, A)

虽然我可以自己计算梯度并注册它,但我看到计算 Cholesky 梯度的唯一现有方法涉及 the use of for loops and needs the shape of the input matrix.然而,据我所知,symbolic loops aren't currently available to TensorFlow.

获取输入矩阵 A 形状的一种可能的解决方法可能是使用:

[int(elem) for elem in list(A.get_shape())]

但如果 A 的维度依赖于形状为 TensorShape([Dimension(None)]) 的 TensorFlow 占位符对象,则此方法不起作用。

如果有人知道如何计算和注册 tf.cholesky 的梯度,我将不胜感激。

最佳答案

我们在这个问题的答案和评论中对此进行了一些讨论:TensorFlow cholesky decomposition .可能(?)可以移植 Theano implementation of CholeskyGrad ,前提是它的语义实际上是你想要的。 Theano 的基于 Smith's "Differentiation of the Cholesky Algorithm" .

如果您将其实现为 Python 刚刚调用的 C++ 操作,您可以不受限制地访问您可能需要的所有循环结构,以及 Eigen 提供的任何内容。如果您想在纯 TensorFlow 中执行此操作,则可以使用控制流操作,例如 tf.control_flow_ops.While循环。

一旦您知道要应用的实际公式,答案就在这里:matrix determinant differentiation in tensorflow展示了如何在 tensorflow 中为操作实现和注册梯度。

你也可以 create an issue on github当然,要请求此功能,如果您自己实现它然后发送拉取请求,您可能会更快地获得它。 :)

关于python - TensorFlow 中的 Cholesky 因子分化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962959/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com