2016-12-07 10 views
0

私は、(ローカル)マルチ-gpuトレーニングのためのcifar10_multi_gpu_trainの例で提案されているトレーニング方法、つまりいくつかのタワーを作成してからグラジエントを平均化しています。しかし、私は次のことを疑問視していました。異なるGPUからの損失を受け取り、それらを合計し、その新しい損失に勾配降下を適用すればどうなりますか?TensorflowでのマルチGPUのトレーニング:より簡単な方法?

これは機能しますか?おそらくこれは愚かな疑問であり、どこかに限界があるはずです。あなたがこれについてコメントできるなら、私は幸せになるでしょう。

おかげで、よろしく、 G.

+0

勾配と平均化操作の順序を入れ替えることは、数学的には同等です(微分は線形演算子です)。しかし、タワー 'i'の勾配操作がタワー' i'と同じデバイス上にあるようにしたいという問題があります。 'colocate_gradients_with_ops'オプションがあり、どれくらいうまく動作しているのかは不明ですが、' cifar10_multi_gpu_train'が書かれた時点では存在しませんでした。 –

答えて

0

それは合計では動作しません。あなたはより大きな損失をもたらし、結果的により大きな、おそらく誤った勾配を得るでしょう。勾配を平均化すると、損失を最小限に抑えるために重みを取らなければならない方向の平均が得られますが、それぞれの単一方向は正確な損失値に対して計算された方向です。

あなたが試みることができる1つのことは、独立してタワーを走らせてから、時折重みを平均し、収束速度は遅くなりますが、各ノードで処理を高速化することです。

関連する問題