我正在尝试使用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
"只有一次,不是。如果是后者,是否有更有效的方式来做我想做的事情?