2017-03-06 3 views
1

deepdreamC++に実装しようとしています。caffe(私はアンドロイドで実行します)。 googlenetは、形状224*224*3の入力が必要です。 deepdreamのipythonノートブックにはsrc.reshape(1,3,h,w)が表示されます。これは、入力BLOBのみが再形成されるか、またはネットワークを介して伝播されることを意味しますか?私はC++net.Reshape()を呼び出してみました、それがもたらした:ネットワークがあまりにも整形してはいけませんCaffe :: net reshape

F0307 01:27:24.529654 31857 inner_product_layer.cpp:64] Check failed: K_ == new_K 
(1024 vs. 319488) Input size incompatible with inner product parameters. 

?入力ブロブを再構成することの意味は何ですか?私は深い学びに新しいです。それは些細なことなら私を許してください。

答えて

1

入力の形状を変更するには、ネット全体の形状を変更する必要があります。悲しいかな、再形成されたくないレイヤータイプもあります。具体的には、「InnerProduct」層:内製層の訓練可能なパラメータの数は、の正確な入力形状と出力形状に依存します()。したがって、 "InnerProduct"レイヤーを持つネットは再形成できません。

"net surgery"の例に記載されているメソッドを使用して、内部製品レイヤーを等価な畳み込みレイヤーに変換することができます(再構成できます)。

+0

私は関連する層に変形を伝播すればよいですか? 'googlenet'では、最後のレイヤーだけが内部のプロダクトレイヤーであり、deepdreamの目的のために、私はいくつかのインセプションレイヤーだけを通過する必要があります。 – lnman

+0

@lnmanネットの一部を再形成することはできません – Shai

+0

ソースコードが 'Net :: Reshape()'で、すべてのレイヤーをループするだけです。ディープドリームの目的のために、私はその層から特定の層まで、そしてその層から後方にのみ進む。だから私には合理的だと思われる。なぜあなたは精緻化できませんか? – lnman