2016-12-07 154 views
0

我一直在使用cifar10_multi_gpu_train示例中为(本地)多GPU训练提出的训练方法,即创建几个塔然后平均梯度。但是,我想知道以下几点:如果我只是将来自不同GPU的损失汇总起来,然后将梯度下降应用到新的损失上,会发生什么?在Tensorflow上培训多GPU:更简单的方法?

会这样吗?可能这是一个愚蠢的问题,并且在某个地方一定有限制。所以我会很高兴,如果你可以评论这一点。

感谢和问候, G.

+0

交换梯度和平均操作的顺序在数学上是等价的(微分是线性算子)。然而,问题在于你希望塔'i'操作的梯度操作与塔'i'在同一个设备上。有'colocate_gradients_with_ops'选项,不知道它有多好,但在编写'cifar10_multi_gpu_train'时不存在。 –

回答

0

它不会与和合作。你会得到更大的损失,因此会有更大更可能是错误的梯度。在平均梯度的同时,您可以获得权重必须采取的平均方向,以最大限度地减少损失,但每个方向都是针对确切损失值计算的方向。

您可以尝试的一件事是独立运行塔架,然后不时平均权重,收敛速度较慢,但​​每个节点上的处理速度较快。