我想用张量流计算雅可比矩阵。
我所拥有的:
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
需要大量的时间。有什么想法吗?
最佳答案
假设X
和Y
是张量流张量,Y
依赖于X
:
from tensorflow.python.ops.parallel_for.gradients import jacobian
J=jacobian(Y,X)
结果具有
Y.shape + X.shape
形状,并提供Y
的每个元素相对于X
的每个元素的偏导数。