1

検証セットから計算されたエラーが増加し始めたら、ネットワークのトレーニングを停止したいと思います。トレーニング アルゴリズムとして RPROP を使用した BasicNetwork を使用しており、次のトレーニング イテレーションがあります。

double validationError = 999.999;


    while(!stop){

        train.iteration(); //weights are updated here

        System.out.println("Epoch #" + epoch + " Error : " + train.getError()) ;

        //I'm just comparing to see if the error on the validation set increased or not
        if (network.calculateError(validationSet) < validationError)
            validationError = network.calculateError(validationSet); 

        else
            //once the error increases I stop the training.
            stop = true ;

        System.out.println("Epoch #" + epoch + "Validation Error" + network.calculateError(validationSet));

        epoch++;

    }
        train.finishTraining();

トレーニングを停止する必要があるかどうかを判断する前に重みが既に変更されているため、明らかにこれは機能していません。一歩下がって古いウェイトを使用できる方法はありますか?

EarlyStoppingStrategyメソッドを使用して使用する必要があると思われるクラスも表示されますaddStrategy()EarlyStoppingStrategyただし、コンストラクターが検証セットとテスト セットの両方を使用する理由がよくわかりません。ネットワークの出力をテストするまでは、検証セットのみが必要であり、テスト セットはまったく使用されるべきではないと考えました。

4

1 に答える 1

2

Encog の EarlyStoppingStrategy クラスは、この論文に従って早期停止戦略を実装します。

プローブ1 | ニューラル ネットワークのベンチマーク問題とベンチマーク ルールのセット

(完全な引用は Javadoc に含まれています)

検証セットのエラーが改善されなくなったらすぐに停止したい場合は、次の Encog SimpleEarlyStoppingStrategy を使用できます。

org.encog.ml.train.strategy.end.SimpleEarlyStoppingStrategy

SimpleEarlyStoppingStrategy には Encog 3.3 が必要であることに注意してください。

于 2014-11-12T00:28:22.487 に答える