問題タブ [conv-neural-network]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
neural-network - 行列間乗算としての 2 次元畳み込み
1D の場合、2 つのベクトル間の畳み込みとは として計算できるだけでなく、a
との間の積としても計算できます。ここで、はに対応するテプリッツ行列です。b
conv(a, b)
T_a
b
T_a
a
このアイデアを 2D に拡張することは可能ですか?
a = [5 1 3; 1 1 2; 2 1 3]
とが与えられた場合、テプリッツ行列b=[4 3; 1 2]
に変換し、1 次元の場合のようにとのa
間の行列-行列積を計算することは可能ですか?T_a
b
python - Theano に追加機能を追加する (CNN)
分類に Theano を使用しています (畳み込みニューラル ネットワーク)
以前は、(平坦化された) 画像のピクセル値を NN の特徴として使用していました。ここで、追加機能を追加したいと思います。
追加機能のベクトルを平坦化された画像機能に連結し、それを完全に接続されたレイヤーへの入力として使用できると言われましたが、それには問題があります。
まず、それは正しいアプローチですか?
ここにいくつかのコードスニペットと私のエラーがあります:
いくつかの変更を加えたサイトから提供された例に似ています
(モデルを構築するクラスから)
以下、変数v
およびrng
は以前に定義されています。重要なことは次のlayer2_input
とおりです。
(訓練するクラスから)
ただし、train_model が呼び出されるとエラーが発生します。
入力形状は、それぞれx
、y
およびの形状を表していf
ますか?
もしそうなら、3 番目は正しいように見えます (batchsize=5、2 つの余分な機能) が、最初がスカラーで 2 番目が行列である理由は何ですか?
詳細:
私は正しい考えを持っていますか、それともこれを達成するためのより良い方法はありますか? エラーが発生する理由についての洞察はありますか?
machine-learning - 畳み込みニューラル ネットワーク層で使用する機能マップの数を決定する方法は?
私は Conv Nets について多くのことを読んだり、Julia の Mocha.jl パッケージ (Caffe によく似ていますが、Julia REPL で操作できます) を使って遊んだりしています。
Conv ネットでは、畳み込みレイヤーの後に「機能マップ」レイヤーが続きます。私が疑問に思っているのは、ネットワークが特定の問題を解決するために必要な機能マップの数をどのように決定するのでしょうか? これには科学がありますか、それともより芸術的ですか?分類を行おうとしている場合、少なくとも最後のレイヤーには、機能マップの数 == クラスの数が必要であることがわかります (ネットワークの最上部に完全に接続された MLP がない限り)。
私の場合、画像内のすべてのピクセルの値を考え出すほど分類を行っているわけではありません (これは、クラスが 0 から 255 までの分類と見なすことができると思います)。
編集: コメントで指摘されているように、出力が 0 から 255 (この場合はグレースケール) の範囲にある回帰問題を解決しようとしています。それでも、問題は残ります: 特定の畳み込み層で使用する特徴マップの数をどのように決定するのでしょうか? これは、回帰問題と分類問題で異なりますか?
machine-learning - 畳み込みディープ ビリーフ ネットワーク (CDBN) と畳み込みニューラル ネットワーク (CNN)
最後に、ニューラル ネットワークの学習を開始しました。畳み込みディープ ビリーフ ネットワークと畳み込みネットワークの違いを知りたいです。こちらにも同様の質問がありますが、正確な答えはありません。Convolutional Deep Belief Network は CNN + DBN であることはわかっています。ということで、物体認識を行います。どちらが他のものよりもはるかに優れているか、またはそれらの複雑さを知りたいです。検索しましたが、何か間違っている可能性があるものは見つかりませんでした。
neural-network - Theano: オートエンコーダーでストライド (サブサンプリング) を使用して畳み込みを再構築する
うまく機能している Theano を使用して、単純な畳み込み自動エンコーダーをトレーニングしたいと考えています。conv2d
ただし、サブサンプリング (ストライド) が使用されている場合にコマンドを元に戻す方法がわかりません。下の画像のように、ストライドが使用されているときに畳み込みコマンドを「反転」する効率的な方法はありますか?
たとえば、次のように変更したい...
... という状況にsubsample = (2,2)
。最初のレイヤーは期待どおりに機能します。ただし、2番目のレイヤーは効果的に「ストライド1で畳み込みを行い、出力の半分を破棄します」。これは、私が探しているものとは明らかに異なる操作です。z
長さ と同じ数のニューロンさえありませんx
。conv2d
オリジナルを「再構築」するための 2 番目のコマンドは何x
ですか?
nlp - NLP の時間畳み込み
私はKalchbrennerらに従おうとしています。2014 ( http://nal.co/papers/Kalchbrenner_DCNN_ACL14 ) (そして基本的に、CNN を NLP タスクに適用した過去 2 年間のほとんどの論文) と、彼らが説明する CNN モデルを実装します。残念ながら、フォワードパスは正しく取得できていますが、グラデーションに問題があるようです。
私がやっているのは、行ごと、カーネルごと、フォワードパスの入力ごとに W を使用した入力の完全な畳み込みです (回転していないため、実際には相関です)。次に、W に関する勾配の場合、行ごと、カーネルごと、入力ごと (ここでも、回転されていません) の前のデルタを使用した入力の有効な畳み込みです。そして最後に、x に関する勾配については、以前のデルタと W を使用した別の有効な畳み込みを、行ごと、カーネルごと、入力ごと (回転なし) に繰り返します。
これは正しいサイズと次元を返しますが、レイヤーを接続するときのグラデーション チェックは実際にはオフになっています。1 つの conv レイヤーをテストすると結果は正しく、2 つの conv レイヤーを接続すると正しい結果が得られますが、MLP やプーリングなどを追加すると見栄えが悪くなります。他のすべてのタイプのレイヤーも個別にテストされ、それらも正しいため、問題はグラデーションの計算から始まると思います。wrt W_conv。
誰かがアイデアや同様の実装への有用なリンクを持っていますか?
machine-learning - 畳み込みニューラル ネットワークは勾配消失の影響を受けますか?
畳み込みニューラルネットワークは、レイヤー数が増加する標準のシグモイドニューラルネットワークほど勾配消失問題に悩まされていないことをどこかで読んだと思います。しかし、私は「なぜ」を見つけることができませんでした。
それは本当に問題に悩まされていませんか、それとも私が間違っていて、アクティベーション機能に依存していますか? [私は整流化された線形ユニットを使用してきたので、畳み込みニューラル ネットワークのシグモイド ユニットをテストしたことはありません]
neural-network - theano を使用して GPU モードの畳み込みニューラル ネットワークを高速化するにはどうすればよいですか?
畳み込みニューラル ネットワークを実装するために theano を使用しています。私の CPU RAM は 32G、GPU RAM は 2G ですが、データも非常に大きく、ほぼ 5G のトレーニング データです。
プログラムの実行中は、コンピューターがフリーズしているように見え、各操作が非常に遅く、応答しません。また、CPU モードは GPU モードよりも少なくとも 2 倍速いようです。
GPU 畳み込みニューラル ネットワークを高速化する方法はありますか?
neural-network - トレーニング画像分類子 - ニューラル ネットワーク
画像内の手の存在を検出するように conv ニューラル ネットワークをトレーニングしたいと思います。
難点は次のとおりです: 1/ 画像には手以外のオブジェクトが含まれます。ちょうど、手が画像のほんの一部である人々のグループの写真のように、2/ 手は多くの向き/形状などを持つことができます (角度等により、開いていたり開いていなかったりします。)
トリミングされた手の画像(+手のないランダムな画像)の大きなセットでconvnetをトレーニングし、画像のすべてのサブスクエアに分類子を適用することを考えていました。これは良いアプローチですか?
インスピレーションに使用できる複雑な 2 クラスの convnets / RNN の他の例はありますか?
ありがとうございました!
machine-learning - torch - LookupTable と勾配の更新
複数のレイヤーを持つニューラル ネットワークを実装しようとしています。私が行ったことが正しいかどうかを理解しようとしています。そうでない場合は、どうすればこれをデバッグできますか。私が行う方法は、次の方法でニューラル ネットワークを定義することです (事前に学習した埋め込みでルックアップ可能レイヤーを初期化します)。
ここで、ネットワークをトレーニングするために、すべてのトレーニングの例をループし、すべての例に対して、次のコードを持つ gradUpdate() を呼び出します (これは例からそのままです)。
findGrad 関数は、勾配 wrt 出力を返す WARP Loss の単なる実装です。これだけでいいのかな?これにより、すべてのレイヤーのパラメーターが逆伝播されて更新されると思います。これを確認するために、このネットワークをトレーニングし、モデルを保存しました。次に、モデルをロードして実行しました:
今、私は vector[1] と lookuptable.weight[1] をチェックしましたが、それらは同じでした。ルックアップ テーブル レイヤーの重みが更新されなかった理由がわかりません。ここで何が欠けていますか?
返信をお待ちしております。