LSTMを用いた予測​結果に振動が発生する​問題について

現在LSTMを用いた時系列データの予測モデルを作成しています.
0から1の範囲で正規化された1行200タイムステップのデータセットAを用いて学習を行い,また予測テストもデータセットAを用いて行ってみたところ,下の図のような結果が得られました.
赤で示した予測結果のとおり,最初の数ステップ分の範囲で大きく振動が発生し,その後真値付近に収束するような結果となりました.
真値はほぼ一定値を取っている範囲なのにここまで大きく振動が発生している原因がわからず,また予測精度としても見栄えとしても良くないので,この振動をなくしたいと考えています.
どなたか似た経験や解決策をお持ちの方等いらっしゃいましたら是非ご教授いただければ幸いです.
よろしくお願い致します.
※参考として下にコードやデータの一部を示します.
% Training dataset A (1*200 double)
[0.668 0.676 0.677 0.668 0.671 0.674 0.671 0.671 0.668 0.677 0.677 0.677 0.677 0.675 0.675 0.672 0.674 0.674 ...
% layers and options
numHiddenUnits = 300;
numFeatures = 1;
numResponses = 1;
layers_5 = [ ...
sequenceInputLayer(numFeatures)
flattenLayer('Name','flatten')
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numResponses)
regressionLayer];
options_5 = trainingOptions('adam', ...
'MaxEpochs',200, ...
'GradientThreshold',1, ...
'InitialLearnRate',0.001, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',50, ...
'LearnRateDropFactor',0.3, ...
'Verbose',0, ...
'Plots','training-progress');
% Prediction
Test_data(:,1) = Train_data(:,1);
for i = 1:199
[net,Test_data(:,i+1)] = predictAndUpdateState(net,Test_data(:,i));
end

댓글 수: 2

Kenta
Kenta 2020년 6월 9일
こんにちは、確かにはじめのほうで特にばたついてますね。
MaxEpochsを500とか1000とか、現実的に増やせる範囲でかなり増やしておなじことをやってみて報告いただけますか?
Yuuki
Yuuki 2020년 6월 10일
Kenta様,
お世話になっております.
MaxEpochsのみを500,1000,2000と変えて実行した結果が以下のグラフになります.
初期の振動を含めほとんど変化がない結果となりました.
・500
500
・1000
・2000

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

도움말 센터File Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

제품

릴리스

R2019b

질문:

2020년 6월 9일

댓글:

2020년 6월 10일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!