0

PyBrainで単純なフィードフォワードニューラルネットワークを作成して、文字を分類しています(26の小文字、26の大文字、10の数字)

2つの異なるドキュメントがあります。1つは大文字と数字のみで、もう1つは小文字と数字と大文字です。

2つの異なるネットワークを作成する必要がありますか?最初のドキュメントが処理されているときに大文字のノードを無効にする方法はありますか?より多くのドキュメント(ドキュメントの画像)が後でプロジェクトに統合される場合、他の組み合わせもあります。それらすべてのために新しいネットワークを作成することは退屈に思えます。

前もって感謝します

PS:pyBrainに関する本当に(本当に)良いチュートリアルを知っている人はいますか?私は初心者であり、ドキュメントは本当に単純な例のみを扱っています。

4

2 に答える 2

0

2 つのネットワークは必要ありません。1 つあれば十分です。これらのラベルをトレーニングするには、62 個のラベル (26 個の上位、26 個の下位、および 10 個の数字) と、より大きなデータ セットが必要です。おそらく、2 つのドキュメントを使用してデータ セットを構築できます。

Prog Ng が coursera クラスで提供している手書き認識に関する非常に優れたチュートリアルがあります ( http://www.ml-class.orgの講義 3 および 4 )。もうすぐ授業が始まると思いますが、手書きの数字を分類するのにとても役立つと思います

于 2013-03-22T20:09:27.927 に答える
0

個別のネットワークのそれぞれが、トレーニングされた適切なトレーニング セットでより優れたパフォーマンスをもたらすことは不思議ではありません。しかし、これらの予測誤差の値は誤解を招く可能性があります。トレーニング セットの誤差を最小化するのは不適切な問題だからです。最終的な目標は、モデルの汎化パフォーマンスを最大化して、トレーニング中に見られなかった新しいデータで適切に機能することです。各文字を記憶するだけで、ハッシュテーブルのように機能するネットワークを想像してみてください。このようなネットワークでは、トレーニング データではエラーが発生しませんが、他のデータではパフォーマンスが低下します。

一般化のパフォーマンスを測定する 1 つの方法は、利用可能なデータの一部 (たとえば 10%) を抽出し、それをテスト セットとして使用することです。このテスト セットは、トレーニング中には使用せず、測定のみに使用します。

さらに、ネットワークのトポロジを確認する必要があります。いくつの隠れ層と、隠れ層ごとにいくつのニューロンを使用しますか? 問題の複雑さに対処できるように、トポロジが十分に大きいことを確認してください。

また、 L1 正則化(各トレーニング ステップの後に重みの絶対値の少量の固定量を減算する)、L2 正則化(各トレーニングの後に重みの小さな割合を減算する)など、ネットワークの汎化パフォーマンスを向上させる他の手法も見てください。ステップ) またはドロップアウト(トレーニング中に非表示のユニットをランダムにオフにし、トレーニングが終了するとすぐに重みベクトルを半分にします)。さらに、単純なバックプロパゲーションではなく、RPROPRMSPropなどのより効率的なトレーニング アルゴリズムを検討する必要があります(ニューラル ネットワークに関する Geoffrey Hinton の coursera コースを参照してください)。)。また、設定をテストするために、書かれた数字 0 ~ 9 を含む MNIST データセットを検討する必要があります (テスト セットで 300 未満の誤分類を簡単に達成できるはずです)。

特定の出力ニューロンを省略する方法に関する元の質問に答えるには、独自のレイヤー モジュールを作成できます。SoftmaxLayer を確認しますが、softmax アクティベーション関数を適用する前に、除外するクラスに属するすべての出力ニューロンを 0 に設定します。outbufで変数を操作する必要があります_forwardImplementation。トレーニング中にこれを使用する場合は、( を操作して_backwardImplementation) エラーを前の層に逆伝播する前に、これらのクラスのエラー信号をゼロに設定してください。これは、不完全なデータがあり、NaN 値を 1 つだけ含む各サンプルを破棄したくない場合などに便利です。しかし、あなたの場合、実際にはこれは必要ありません。

于 2013-03-23T18:36:11.850 に答える