私は機械学習とPythonでいくつかの背景を持っていますが、私はTensorFlowを学んでいます。私はtutorial on deep convolutional neural netsを使って画像分類に使用する方法を教えています。道に沿って、私は完了するのに苦労している運動があります。TensorFlow CNNチュートリアル:最上位レイヤーをローカルに接続する方法を教えてください。
演習:推論()のモデルアーキテクチャは、cuda-convnetで指定されたCIFAR-10モデルとは少し異なります。特に、アレックスのオリジナルモデルの最上位層は、ローカルに接続されており、完全には接続されていません。最上位層にローカルに接続されたアーキテクチャを正確に再現するようにアーキテクチャを編集してみてください。
練習問題は、cifar10.py modelのinference()関数を参照しています。 2番目から最後のレイヤー(local4と呼ばれます)はshape = [384,192]で、トップレイヤーはshape = [192、NUM_CLASSES]です。NUM_CLASSES = 10です。私たちは編集することが求められているコードは、トップ層を定義するコードのどこかにあると思う:
with tf.variable_scope('softmax_linear') as scope:
weights = _variable_with_weight_decay('weights', [192, NUM_CLASSES],
stddev=1/192.0, wd=0.0)
biases = _variable_on_cpu('biases', [NUM_CLASSES],
tf.constant_initializer(0.0))
softmax_linear = tf.add(tf.matmul(local4, weights), biases,name=scope.name
_activation_summary(softmax_linear)
しかし、私は、層間の接続の確率を決定任意のコードが表示されないので、私は知りません完全に接続されたモデルからローカルに接続されたモデルに変更する方法誰かがこれを行う方法を知っていますか?
この回答は、この課題を解決するものではありません。 W行列は「マルチバンド」でなければならない。たとえば、フィルタが3x3の場合、3つの対角バンド、それぞれ3つの要素幅が必要です。 tf.matrix_band_part()は1つのバンドのみを許可します。 また、Wの次元が変化するため、元のWを取り、いくつかの要素をゼロに設定することはできません。特に、Wの行数は、フラット化された出力フィーチャマップの長さと等しくなければなりません。 私はXyandの答えがより良いアプローチだと考えています:画像パッチを抽出し、それ自身のカーネルでそれぞれを掛けるので、テンソルは2つの余分な次元(6Dになります)を得ます。 – MichaelSB
十分に公正です。これは、私がこの運動を解決する方法の手がかりを与える数学の何らかの理解を得ることを試みているちょうど私でした。私は彼らが演習を与える理由は、人々が自分自身のために考えさせることだと思うので、私は実際にコピー/貼り付けできるコードを与えるだけではなく、理論的にどのようにアプローチできるかを理解するのに役立つ。エンジニアリングだけでなく、神経網を扱うときに線形代数のいくつかを理解することは有益です。 –
私はこのローカルに接続されたレイヤーを処理して以来、しばらくしています。しかし、@DavidPickupによるアプローチは、完全な行列に定数指標行列を乗算したマルチバンド行列をシミュレートすることで実際に動作します。Wのサイズは(w_out * h_out)X(w_in * h_in * d_in)でなければなりません。しかし、それはかなり無駄に思われる。何か不足していますか? – Xyand