0

画像内のいくつかのものを分類するためにニューラル ネットワークをトレーニングしています。私は 40x40 ピクセルの画像をトリミングし、それをオブジェクトかどうかに分類します。したがって、1600 個の入力ニューロン、3 つの隠れ層 (500、200、30)、および 1 または 0 を示さなければならない 1 つの出力ニューロンがあります。私はFloodライブラリを使用します。

QuasiNewtonMethodアルゴリズムで大きな行列を使用し、メモリに収まらないため、 でトレーニングできません。だから私はGradientDescentObjectiveFunctionalisを使いますNormalizedSquaredError

問題は、トレーニングによって重みがオーバーフローし、ニューラル ネットワークの出力がすべての入力に対してINForになることです。NaN

また、データセットが大きすぎて (CSV の場合は約 800 MB)、完全に読み込むことができません。そのため、1000 個のインスタンスを多数作成し、それを XML ( FloodInputTargetDataSetsのデフォルト形式) として保存し、ランダムにシャッフルされた各データセットで 1 エポックのトレーニングを行いました。しかし、1 つの大きなデータセット (10000 インスタンス) だけでトレーニングすると、オーバーフローします。

なぜこれが起こっているのですか、どうすればそれを防ぐことができますか?

4

1 に答える 1

1

入力の正規化をお勧めします。また、1600 個のニューロンがある場合は、入力層の出力が合計され (シグモイド ニューロンの場合)、多くの問題が発生する可能性があることも考慮する必要があります。

たとえば、どのステップでオーバーフローするかなど、いくつかのステップを出力すると非常に便利です。

ニューロンの重みにはいくつかのヒントがあります。非常に小さい < 0.01 をお勧めします。NN と入力の間隔、重みなどについてさらに情報を提供できれば、他のアイデアを提供できます。

ところで、人間の目をシミュレートする特殊なアルゴリズムを使用していない場合は、2 つのレイヤーで十分であることが数学的に証明されているため、3 つの隠しレイヤーは必要ないと思います..

于 2012-09-03T11:02:48.110 に答える