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 Commenti

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

Accedi per commentare.

Risposte (0)

Categorie

Scopri di più su Deep Learning Toolbox in Centro assistenza e File Exchange

Prodotti

Release

R2019b

Richiesto:

il 9 Giu 2020

Commentato:

il 10 Giu 2020

Community Treasure Hunt

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

Start Hunting!