如何在Tensorflow中逐层有效地计算梯度?

时间:2016-05-12 11:04:21

标签: python tensorflow gradients

我正在尝试使用Tensorflow实现此paper中描述的分布式同步SGD方法。为此,我需要逐层计算和应用渐变。原则上我可以通过以下方式完成(obs!不完整的代码:

#WORKER CODE
opt = tf.train.GradientDescentOptimizer(learning_rate)
for layer_vars in all_layer_vars:
    grads_vars = opt.compute_gradients(loss, layer_vars)
    grads = sess.run([grad_var[0] for grad_var in grads_vars], feed_dict)
    send_grads_to_master(zip(grads, layer_vars))

#MASTER CODE
while (True):
    grads_vars = receive_grads_from_worker()
    sess.run(opt.apply_gradients(grads_vars))

我想知道在这种情况下(在compute_gradients()内)进行多次session.run()'s次调用时,Tensorflow执行的内部操作数量是否与"标准相同或更高? #34;仅使用compute_gradients()的一次调用计算所有梯度的场景。

也就是说,考虑到反向传播算法,我想知道在这个分布式场景中,Tensorflow是否会计算出不同的" delta's"只有一次,不是。如果是后者,是否有更有效的方式来做我想做的事情?

0 个答案:

没有答案