検証セットから計算されたエラーが増加し始めたら、ネットワークのトレーニングを停止したいと思います。トレーニング アルゴリズムとして 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
ただし、コンストラクターが検証セットとテスト セットの両方を使用する理由がよくわかりません。ネットワークの出力をテストするまでは、検証セットのみが必要であり、テスト セットはまったく使用されるべきではないと考えました。