通过阅读TensorFlow文档,我看到有一种方法可以计算方阵的Cholesky分解.但是,通常当我想使用Cholesky分解时,我这样做的目的是求解直接矩阵求逆可能不稳定的线性系统.
因此,我正在寻找一种类似于Scipy中实现的方法.有没有人知道TensorFlow中是否存在这种情况,或者是否存在可以合并的方式?
我有兴趣使用TensorFlow计算矩阵行列式的导数.我可以从实验中看出,TensorFlow尚未实现通过行列式区分的方法:
LookupError: No gradient defined for operation 'MatrixDeterminant'
(op type: MatrixDeterminant)
Run Code Online (Sandbox Code Playgroud)
进一步的调查显示,实际上可以计算导数; 例如,参见Jacobi的公式.我确定为了实现这种通过决定因素来区分我需要使用函数装饰器的方法,
@tf.RegisterGradient("MatrixDeterminant")
def _sub_grad(op, grad):
...
Run Code Online (Sandbox Code Playgroud)
但是,我对张量流不熟悉,无法理解如何实现这一目标.有没有人对此事有任何见解?
这是我遇到这个问题的一个例子:
x = tf.Variable(tf.ones(shape=[1]))
y = tf.Variable(tf.ones(shape=[1]))
A = tf.reshape(
tf.pack([tf.sin(x), tf.zeros([1, ]), tf.zeros([1, ]), tf.cos(y)]), (2,2)
)
loss = tf.square(tf.matrix_determinant(A))
optimizer = tf.train.GradientDescentOptimizer(0.001)
train = optimizer.minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
for step in xrange(100):
sess.run(train)
print sess.run(x)
Run Code Online (Sandbox Code Playgroud)