2016-12-13 7 views
2

tensorflow.contrib.slim.batch_normでは、moving_meanの値をコピーするためにmath_ops.add(moving_mean, 0)が使用されます。これは、後でpassed to nn.momentsとなります。いつテンソルtの代わりにtf.add(t、0)を直接使うべきですか?

moving_meannn.momentsに直接渡すだけで問題がありますか?

コピー操作(tf.add(t, 0))の使用に関するガイドラインはありますか?

+0

[このコミット](https://github.com/tensorflow/tensorflow/commit/e78fadb2)に追加されました。結果として、tの値がコピーされるので、別のワーカーがtの値をパラレルに変更すると、影響を受けず、tf.momentsの計算に古い値が使用されます。 –

+0

@YaroslavBulatov答えを見つける方法を共有していただきありがとうございます。コミットログを調べることは非常に役に立ちます。 – Jenny

答えて

1

問題は、moving_meanが更新される順序によって、shiftとして使用される元のmoving_meanの代わりに、勾配がmoving_meanの更新版を使用する可能性があることです。したがって、同じ値が順方向パスと逆方向パスで使用されていることを確認するために、明示的なコピーを行います。

0

周囲の情報はあまりありませんが、テンソル参照を通常のテンソルに変換するために使用できます。テンソル参照がテンソルの値を変更した場合、それらをキューにプッシュするとその動作は異なります。これについてはquestionで詳しく読むことができます。

関連する問題