画像分類に畳み込みニューラルネットワーク(特徴を検出するための教師なし特徴学習+ Softmax回帰分類器)を使用しています。 Andrew NGこの分野で。( http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial ))によるすべてのチュートリアルを完了しました。
私が開発したネットワークには:
スパースオートエンコーダーを使用して入力レイヤーを非表示レイヤーに接続する重みを学習したため、400の異なる機能があります。
任意の入力画像(64x64)から連続した8x8パッチを取得し、それを入力レイヤーにフィードすることで、サイズ(57x57)の400個の特徴マップを取得します。
次に、サイズ19 x 19のウィンドウで最大プーリングを使用して、サイズ3x3の400個の特徴マップを取得します。
このフィーチャマップをsoftmaxレイヤーにフィードして、3つの異なるカテゴリに分類します。
隠れ層の数(ネットワークの深さ)や層ごとのニューロンの数などのこれらのパラメーターは、すべての画像のサイズが64x64である特定のデータセットで正常に使用されたため、チュートリアルで提案されました。
これを、画像がはるかに大きい(たとえば、400x400)自分のデータセットに拡張したいと思います。どうすれば決めることができますか
レイヤーの数。
層ごとのニューロンの数。
プーリングウィンドウのサイズ(最大プーリング)。
非表示レイヤーの数:必要な非表示レイヤーの数は、データセットの本質的な複雑さによって異なります。これは、各レイヤーが何を達成するかを調べることで理解できます。 :
隠れ層がないため、ネットワークは線形関数のみをモデル化できます。これは、ほとんどの画像認識タスクには不十分です。
1つの隠れ層により、ネットワークは任意に複雑な関数をモデル化できます。これは、多くの画像認識タスクに適しています。
理論的には、2つの隠れ層は単一の層に比べてほとんど利点がありませんが、実際には、一部のタスクでは追加の層が有益であることがわかります。 2番目の層は過剰適合を引き起こす可能性があるため、これは注意して扱う必要があります。 3つ以上の隠しレイヤーを使用することは ほとんど有益ではありません 特に複雑なタスク、または非常に大量のトレーニングデータが利用可能な場合にのみ有益です(Evgeni Sergeevのコメントに基づいて更新されます)。
長い話を短くするために、時間があれば、1つと2つの隠れ層の両方をテストして、どちらが最も満足のいく結果を達成するかを確認します。時間がない場合は、1つの隠れたレイヤーをパントする必要があります。そうすれば、間違いはほとんどありません。
畳み込み層の数:私の経験では、畳み込み層が多いほど良いです(理由の範囲内で、各畳み込み層は入力特徴の数を減らします。完全に接続された層)。ただし、約2層または3層の後、精度の向上はかなり小さくなるため、主な焦点が一般化の精度であるかトレーニング時間であるかを判断する必要があります。とはいえ、すべての画像認識タスクは異なるため、最良の方法は、結果に満足するまで、畳み込み層の数を一度に1つずつ増やすことです。
隠れ層あたりのノード数:...繰り返しになりますが、ノード数を決定するための魔法の公式はありません。ノード数はそれぞれ異なります。仕事。通過する大まかなガイドは、前のレイヤーの2/3のサイズのノードの数を使用し、最初のレイヤーは最終的なフィーチャマップの2/3のサイズを使用することです。ただし、これは大まかなガイドであり、データセットによって異なります。もう1つの一般的に使用されるオプションは、過剰な数のノードから開始し、プルーニングを使用して不要なノードを削除することです。
最大プーリングウィンドウサイズ:私は常に畳み込みの直後に最大プーリングを適用しているため、使用するウィンドウサイズについて提案する資格がない可能性があります。とはいえ、19x19の最大プーリングは、文字通りほとんどのデータを破棄するため、非常に厳しいようです。おそらく、より従来型のLeNetネットワークレイアウトを検討する必要があります。
http://deeplearning.net/tutorial/lenet.html
https://www.youtube.com/watch?v=n6hpQwq7Inw
畳み込み(通常は5x5または3x3)を繰り返し実行した後、最大プーリングを実行します(通常、2x2のプーリングウィンドウを使用しますが、大きな入力画像には4x4が必要になる場合があります)。
結論適切なネットワークレイアウトを見つける最良の方法は、文字通り試行錯誤のテストを実行することです。たくさんのテスト。万能のネットワークはなく、データセットの本質的な複雑さを知っているのはあなただけです。必要な数のテストを実行する最も効果的な方法は、 相互検証 を使用することです。
簡単に言うと、パラメーターの可能な値を決定し、それらの値を使用して、モデル構築と予測の一連のシミュレーションを実行して、最小の予測誤差とより単純なモデルを提供する最適なパラメーター値を選択します。
データ分析の用語では、偏りのない方法で予測することが重要であるため、モデルパラメータの値を決定するために holdout、cross-validation、bootstrapping を使用します。