個別のネットワークのそれぞれが、トレーニングされた適切なトレーニング セットでより優れたパフォーマンスをもたらすことは不思議ではありません。しかし、これらの予測誤差の値は誤解を招く可能性があります。トレーニング セットの誤差を最小化するのは不適切な問題だからです。最終的な目標は、モデルの汎化パフォーマンスを最大化して、トレーニング中に見られなかった新しいデータで適切に機能することです。各文字を記憶するだけで、ハッシュテーブルのように機能するネットワークを想像してみてください。このようなネットワークでは、トレーニング データではエラーが発生しませんが、他のデータではパフォーマンスが低下します。
一般化のパフォーマンスを測定する 1 つの方法は、利用可能なデータの一部 (たとえば 10%) を抽出し、それをテスト セットとして使用することです。このテスト セットは、トレーニング中には使用せず、測定のみに使用します。
さらに、ネットワークのトポロジを確認する必要があります。いくつの隠れ層と、隠れ層ごとにいくつのニューロンを使用しますか? 問題の複雑さに対処できるように、トポロジが十分に大きいことを確認してください。
また、 L1 正則化(各トレーニング ステップの後に重みの絶対値の少量の固定量を減算する)、L2 正則化(各トレーニングの後に重みの小さな割合を減算する)など、ネットワークの汎化パフォーマンスを向上させる他の手法も見てください。ステップ) またはドロップアウト(トレーニング中に非表示のユニットをランダムにオフにし、トレーニングが終了するとすぐに重みベクトルを半分にします)。さらに、単純なバックプロパゲーションではなく、RPROPやRMSPropなどのより効率的なトレーニング アルゴリズムを検討する必要があります(ニューラル ネットワークに関する Geoffrey Hinton の coursera コースを参照してください)。)。また、設定をテストするために、書かれた数字 0 ~ 9 を含む MNIST データセットを検討する必要があります (テスト セットで 300 未満の誤分類を簡単に達成できるはずです)。
特定の出力ニューロンを省略する方法に関する元の質問に答えるには、独自のレイヤー モジュールを作成できます。SoftmaxLayer を確認しますが、softmax アクティベーション関数を適用する前に、除外するクラスに属するすべての出力ニューロンを 0 に設定します。outbuf
で変数を操作する必要があります_forwardImplementation
。トレーニング中にこれを使用する場合は、( を操作して_backwardImplementation
) エラーを前の層に逆伝播する前に、これらのクラスのエラー信号をゼロに設定してください。これは、不完全なデータがあり、NaN 値を 1 つだけ含む各サンプルを破棄したくない場合などに便利です。しかし、あなたの場合、実際にはこれは必要ありません。