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 Comments

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

Sign in to comment.

Answers (0)

Categories

Find more on Deep Learning Toolbox in Help Center and File Exchange

Products

Release

R2019b

Asked:

on 9 Jun 2020

Commented:

on 10 Jun 2020

Community Treasure Hunt

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

Start Hunting!