我想获得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,我将非常感谢您了解它。