2016-04-19 14 views
2

私はレイヤー間の部分的な接続を実装しようとしています。たとえば、第1および第3のフィーチャマップなど、一部のフィーチャマップのみを使用したいとします。Tensorflowでは、部分接続にtf.gather()を使用できますか?

  • この目的でtf.gather()を使用するのは正しいですか?
  • 以下のようにtf.gather()の代わりにインデックス演算子[]を使用できますか?
  • インデックスの収集は、バックプロパゲーションの観点から機能しますか?私がTensorflowがを知っていることを内部的に知っているのは難しいです。内側のバックプロッププロセスで、第1と第3の情報がハードコーディングされています。関数tf.gatherは接続を覚えていますか?

コード:

# let say, L1 is layer1 output of shape [batch_size x image_size x image_size x depth1] 
partL1 = L1[:, :, :, [0,2]] 
# W2 is a tf variable of shape [5, 5, 2, depth2] 
conv2 = tf.nn.conv2d(partL1, W2) 

答えて

3

はい、いいえ、はい。 :-) (a)可能であれば、gatherを使用してレイヤーのサブセットを選択し、次のレイヤーに伝播させることができます。

(b)いいえ、残念ながら、インデックス演算子は使用できません。 tf.gather()を明示的に呼び出す必要があります。

(c)はい、TensorFlowは、バックドロップのために収集して保存するために使用されるインデックスのコピーを隠します。あなたが好奇心をそそる場合は、the implementation of Gather's Gradientを見ることができます - それはopへの入力を見て、それを使って戻って伝播します。

+0

ありがとうございます!私は多くのことを学びました :) –

関連する問題