Rui*_*Shu 5 python linear-algebra tensorflow
我想获得tf.cholesky关于其输入的梯度。截至目前,tf.cholesky还没有注册渐变:
LookupError: No gradient defined for operation 'Cholesky' (op type: Cholesky)
Run Code Online (Sandbox Code Playgroud)
用于生成此错误的代码是:
import tensorflow as tf
A = tf.diag(tf.ones([3]))
chol = tf.cholesky(A)
cholgrad = tf.gradients(chol, A)
Run Code Online (Sandbox Code Playgroud)
虽然我可以自己计算梯度并注册它,但我见过计算 Cholesky 梯度的唯一现有方法涉及使用 for 循环并需要输入矩阵的形状。但是,据我所知,符号循环目前不适用于 TensorFlow。
获取输入矩阵形状的一种可能的解决方法A可能是使用:
[int(elem) for elem in list(A.get_shape())]
Run Code Online (Sandbox Code Playgroud)
但是,如果 的尺寸A依赖于具有 shape 的 TensorFlow 占位符对象,则此方法不起作用TensorShape([Dimension(None)])。
如果有人对如何计算和注册 的梯度有任何想法tf.cholesky,我将非常感谢您了解它。
我们在这个问题的答案和评论中对此进行了一些讨论: TensorFlow cholesky 分解。可能(?)可以移植CholeskyGrad 的 Theano 实现,只要它的语义实际上是您想要的。Theano 是基于Smith 的“Cholesky 算法微分”。
如果您将其实现为 Python 调用的 C++ 操作,则您可以不受限制地访问您想要的所有循环结构以及 Eigen 提供的任何内容。如果您想在纯张量流中执行此操作,则可以使用控制流操作,例如tf.control_flow_ops.While循环。
一旦您知道了要应用的实际公式,答案就在这里: 张量流中的矩阵行列式微分 展示了如何在张量流中实现和注册运算的梯度。
您也可以在 github 上创建一个问题来请求此功能,当然,如果您自己实现它然后发送拉取请求,您可能会更快地获得它。:)
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |