2016-07-25 3 views
0

ここでは、最大プールの後方実装とちょっと混乱しています。https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/maxpooling_op_gpu.cu.cc#L192TensorflowでMaxプールを後ろにどのように起こっていますか?

ここでどのように勾配が計算されているか説明できます。 max poolの局所的なグラデーションのように、0と1は入っているので、入ってくるgrad_inから値をコピーするだけですか?パラメータtop_diff、top_offset、bottom_offsetについてのコメントがありますが、誰かが何かを説明することができますか(私は初心者です)?

答えて

2

あなたは、最大プールのローカルグラデーションについては01です。しかし、同じ最大値が隣接する2つのパッチから伝搬された場合、対応する勾配値は合計され、その最大値の位置に戻されなければならない。例えば、1-Dベクトルを考慮してください。

[x0 x1 x2] 

を使用すると、パッチサイズ2とストライド1MaxPoolを実行している、とmax(x0, x1) = x1max(x1, x2) = x1と仮定されているとします。その後、出力は

[x1 x1] 

その後、backproppedする必要が勾配が

[0 g1+g2 0] 

であるあなたが指摘コードでcudaAtomicAdd関数呼び出しを参照してください何が、のは、勾配が入ってくることは[g1 g2]あるとしましょうだろうでる。

+0

こんにちは@keveman、ご返信ありがとうございます。今では最大のアンプール操作を行うとしたら、あなたが言及したパッチサイズとストライドで[x1 x1]とargmax行列[1 1]を使って[0 x1 0]にプールされます。後方に戻る?これは、逆方向の最大プール解除には意味がありますか? 'int image_id =(index/top_offset); CudaAtomicAdd(bottom_diff + index、top_diff [マスク] + image_id * top_offset]); ' –

関連する問題