计算Tensorflow中的雅可比矩阵

时间:2018-05-09 01:29:00

标签: python tensorflow gradient

我想通过Tensorflow计算雅可比矩阵。

我有什么:

def compute_grads(fn, vars, data_num):
    grads = []
    for n in range(0, data_num):
        for v in vars:
            grads.append(tf.gradients(tf.slice(fn, [n, 0], [1, 1]), v)[0])
    return tf.reshape(tf.stack(grads), shape=[data_num, -1])

fn是一种损失函数,vars是所有可训练的变量,data_num是一些数据。

但是如果我们增加数据量,运行函数compute_grads需要花费大量时间。 有什么想法吗?

2 个答案:

答案 0 :(得分:5)

假设XY是Tensorflow张量,并且Y取决于X

from tensorflow.python.ops.parallel_for.gradients import jacobian
J=jacobian(Y,X)

结果的形状为Y.shape + X.shape,并提供Y的每个元素相对于X的每个元素的偏导数。

答案 1 :(得分:0)

假设您正在使用Tensorflow 2或Tensorflow <2和Eager模式,则可以使用GradientTape和inbuild函数:

with tf.GradientTape() as g:
  x  = tf.constant([1.0, 2.0])
  g.watch(x)
  y = x * x
jacobian = g.jacobian(y, x)
# jacobian value is [[2., 0.], [0., 4.]]

检查official documentation了解更多