2

Encogで何か間違っていると思います。私が見たすべての例では、特定のトレーニング エラーに達するまで単純に TRAIN し、結果を出力します。勾配が計算され、非表示レイヤーの重みが更新されるのはいつですか? これはすべて training.iteration() 関数内に含まれていますか? プログラムで TRAINING エラーが減少し続けているため、これは意味がありません。これは、重みが変化していることを意味しているように見えますが、ネットワークを介して検証セットをまだ実行していないためです (構築時にトレーニングセットから切り離して分離しました)。最初のデータ) を使用して、検証エラーがまだトレーニング エラーと共に減少しているかどうかを判断します。

また、検証セットをトレーナーにロードし、compute() を使用してネットワーク経由で実行しましたが、検証エラーは常にトレーニング エラーに似ているため、トレーニングからの同じエラーかどうかを判断するのは困難です。一方、テストのヒット率は 50% 未満です (学習していない場合に期待)。

さまざまな種類のバックプロパゲーション手法があることは知っていますが、特に勾配降下法と回復力のあるバックプロパゲーションを使用する一般的な手法があります。ネットワークのどの部分を自分で手動で更新する必要がありますか?

4

1 に答える 1

3

Encog では、Train.iteration メソッドの呼び出し中に重みが更新されます。これにはすべての重みが含まれます。勾配降下タイプのトレーナー (つまり、backprop、rprop、quickprop) を使用している場合、ニューラル ネットワークは各反復呼び出しの最後に更新されます。人口ベースのトレーナー (つまり、遺伝的アルゴリズムなど) を使用している場合は、finishTraining を呼び出して、最適な人口メンバーを、トレーナーのコンストラクターに渡した実際のニューラル ネットワークにコピーして戻す必要があります。実際、繰り返しの後に finishTraining を呼び出すことは常に良い考えです。必要とするトレーナーもいれば、必要としないトレーナーもいます。

心に留めておくべきもう 1 つのことは、一部のトレーナーは反復の呼び出しの開始時に現在のエラーを報告し、他のトレーナーは反復の呼び出し (改善されたエラー) で報告することです。これは、一部のトレーナーがデータを 2 回繰り返す必要がないようにするための効率です。

トレーニングをテストするための検証セットを維持することをお勧めします。あなたに役立つかもしれないいくつかの方法:

BasicNetwork.dumpWeights - ニューラル ネットワークの重みを表示します。これにより、それらが変更されたかどうかを確認できます。BasicNetwork.calculateError - これにトレーニング セットを渡すと、エラーが発生します。

于 2014-06-22T01:29:50.640 に答える