【发布时间】:2018-05-09 01:29:00
【问题描述】:
我想通过 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会花费大量时间。
有什么想法吗?
【问题讨论】:
-
您是否对代码进行了基准测试?除非您知道要改进什么,否则您无法改进它。
-
请参阅issue #675,了解有关如何在 TensorFlow 中计算雅可比行列式的讨论。一般来说,没有“好方法”来做到这一点。
-
感谢您的评论。我按照问题实现了 Levenberg-Marquardt 算法,但是计算时间比用 c++ 实现的 ceres 求解器慢...
标签: python tensorflow gradient