関数をまだ見る機会がありませんがadapt
、上書きではなく更新していると思われます。このステートメントを検証するには、最初のデータ チャンクのサブセットをトレーニングの 2 番目のチャンクとして選択する必要がある場合があります。上書きしている場合、サブセットでトレーニング済みのネットを使用して最初のデータ チャンクをテストすると、サブセットに属さないデータの予測が不十分になるはずです。
非常に単純なプログラムでテストしました: train the curve y=x^2
。最初のトレーニング プロセスで、次のデータ セットを学習しました[1,3,5,7,9]
。
m=6;
P=[1 3 5 7 9];
T=P.^2;
[Pn,minP,maxP,Tn,minT,maxT] = premnmx(P,T);
clear net
net.IW{1,1}=zeros(m,1);
net.LW{2,1}=zeros(1,m);
net.b{1,1}=zeros(m,1);
net.b{2,1}=zeros(1,1);
net=newff(minmax(Pn),[m,1],{'logsig','purelin'},'trainlm');
net.trainParam.show =100;
net.trainParam.lr = 0.09;
net.trainParam.epochs =1000;
net.trainParam.goal = 1e-3;
[net,tr]=train(net,Pn,Tn);
Tn_predicted= sim(net,Pn)
Tn
結果 (出力は同じ基準でスケーリングされることに注意してください。標準の正規化を行っている場合は、最初のトレーニング セットの平均値と標準値を残りのすべてのセットに常に適用するようにしてください):
Tn_predicted =
-1.0000 -0.8000 -0.4000 0.1995 1.0000
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
次に、トレーニング データを使用して 2 番目のトレーニング プロセスを実装します[1,9]
。
Pt=[1 9];
Tt=Pt.^2;
n=length(Pt);
Ptn = tramnmx(Pt,minP,maxP);
Ttn = tramnmx(Tt,minT,maxT);
[net,tr]=train(net,Ptn,Ttn);
Tn_predicted= sim(net,Pn)
Tn
結果:
Tn_predicted =
-1.0000 -0.8000 -0.4000 0.1995 1.0000
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
x=[3,5,7];
のデータは依然として正確に予測されていることに注意してください。
ただし、x=[1,9];
最初からのみトレーニングすると、次のようになります。
clear net
net.IW{1,1}=zeros(m,1);
net.LW{2,1}=zeros(1,m);
net.b{1,1}=zeros(m,1);
net.b{2,1}=zeros(1,1);
net=newff(minmax(Ptn),[m,1],{'logsig','purelin'},'trainlm');
net.trainParam.show =100;
net.trainParam.lr = 0.09;
net.trainParam.epochs =1000;
net.trainParam.goal = 1e-3;
[net,tr]=train(net,Ptn,Ttn);
Tn_predicted= sim(net,Pn)
Tn
結果を見る:
Tn_predicted =
-1.0071 -0.6413 0.5281 0.6467 0.9922
Tn =
-1.0000 -0.8000 -0.4000 0.2000 1.0000
訓練されたネットがうまく機能しなかったことに注意してくださいx=[3,5,7];
上記のテストは、トレーニングが再起動ではなく、以前のネットに基づいていることを示しています。パフォーマンスが低下する理由は、各データ チャンク (バッチ勾配降下ではなく確率的勾配降下) に対して 1 回しか実装しないため、合計誤差曲線がまだ収束しない可能性があるためです。データ チャンクが 2 つしかない場合、チャンク 2 のトレーニングが完了したらチャンク 1 を再トレーニングし、次にチャンク 2 を再トレーニングし、次にチャンク 1 というように、いくつかの条件が満たされるまで再トレーニングする必要がある場合があります。チャンクがはるかに多い場合は、1 番目のトレーニング効果に比べて 2 番目の効果について心配する必要はないかもしれません。オンライン学習は、更新された重みがそれらのパフォーマンスを損なうかどうかに関係なく、以前のデータ セットを削除するだけです。