主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

深层学习を使使をたた系列予测

このこのでで,长长记忆(LSTM)ネットワークネットワーク使使てててを予测ますますををします。

シーケンスの将来のタイムステップの値を予測するために,sequence-to-sequence回帰用のLSTMネットワークに学習させることができます。その応答は1タイムステップ分シフトした値を持つ学習シーケンスです。つまり,入力シーケンスの各タイムステップで,LSTMネットワークは次のタイムステップの値を予測するように学習します。

将来の複数のタイムステップの値を予測するには,関数predictAndUpdateStateを使用して,タイムステップを1つずつ予測し,予測ごとにネットワークの状態を更新します。

この例ではデータセット水痘_datasetををでます。この例では,前月までの水ぼうのの生物数量をて,水ぼうそうの生长次数をするようlstmネットワークネットワークネットワークにさますますにさます。

シーケンスデータの読み込み

例のデータを読み込みます。水痘_datasetには,月に対応するタイムステップと発生件数に対応する値を含む1つの時系列が含まれています。出力は细胞配列で,その各要素は1つのタイムステップです。データを行ベクトルに形状変更します。

数据= chickenpox_dataset;数据=({}):数据;图绘制(数据)包含(“月”)ylabel(“案例”)标题(“每月水痘病例”

学習データとテストデータに分割します。シーケンスの最初の90%で学習を行い,残りの10%でテストを行います。

地板numTimeStepsTrain =(0.9 *元素个数(数据);dataTrain =数据(1:numTimeStepsTrain + 1);人数(=数据(numTimeStepsTrain + 1:结束);

データの標準化

良好な適合を実現し,学習の発散を防ぐには,ゼロ平均と単位分散を持つように学習データを標準化します。予測時には,学習データと同じパラメーターを使用してテストデータを標準化しなければなりません。

μ=意味着(dataTrain);sig =性病(dataTrain);datatrain标准化= (datatrainmu) / sig;

予測子と応答の準備

シーケンスの将来のタイムステップの値を予測するには,1タイムステップ分シフトした値を持つ学習シーケンスになるように応答を指定します。つまり,入力シーケンスの各タイムステップで,LSTMネットワークは次のタイムステップの値を予測するように学習します。予測子は,最後のタイムステップを含まない学習シーケンスです。

XTrain = dataTrainStandardized (1: end-1);YTrain = dataTrainStandardized(2:结束);

LSTMネットワークアーキテクチャの定義

lstm回帰ネットワークを作用成し.200个の隠れを持つlstm层を指定します。

numFeatures = 1;numResponses = 1;numHiddenUnits = 200;层= [...sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits) fulllyconnectedlayer (numResponses) regressionLayer];

学習オプションを指定します。ソルバーを“亚当”に设定し,学习を250エポック行います。勾配の発散を防ぐために,勾配のしきい値を1に设定します。初期学习率を0.005に指定し,125エポック后に系数0.2を乘算して学习率を下载。

选项=培训选项(“亚当”...“MaxEpochs”, 250,...“GradientThreshold”, 1...“InitialLearnRate”, 0.005,...“LearnRateSchedule”“分段”...“LearnRateDropPeriod”, 125,...“LearnRateDropFactor”, 0.2,...“详细”0,...“阴谋”“训练进步”);

LSTMネットワークの学習

trainNetworkを使用し,指定した学習オプションでLSTMネットワークに学習させます。

net = trainnetwork(xtrain,ytrain,图层,选项);

将来のタイムステップの予測

将来の複数のタイムステップの値を予測するには,関数predictAndUpdateStateを使使し,タイムステップを1つずつ予测,予测ごとにネットワーク状态状态更予测ごと,予测に,前に予测をを。

学科データデータ同じパラメーターパラメーターししてテストをを标准标准ますます。

datatest标准化= (dataTest - mu) / sig;XTest = dataTestStandardized (1: end-1);

ネットワークの状態を初期化するには,まず,学習データXTrainについて予测を行ます。次次,学校の応答YTrain(结束)の最後のタイムステップを使用して,最初の予測を行います。残りの予測についてループし,前の予測をpredictAndUpdateStateにに力します。

データの大規模なコレクション,長いシーケンス,または大規模ネットワークの場合は,通常,GPUでの予測の方がCPUでの予測より計算時間が短縮されます。そうでない場合,通常,CPUでの予測の計算の方が高速です。1タイムステップの予測には,CPUを使用します。予測にCPUを使用するには,predictAndUpdateState“ExecutionEnvironment”オプションを“cpu”に設定します。

net = predictandanddattestate(net,xtrain);[net,ypred] = predictandanddattestate(net,ytrain(端));numtimestepstest = numel(xtest);i = 2:numTimeStepsTest [net,YPred(:,i)] = predictAndUpdateState(net,YPred(:,i)),“ExecutionEnvironment”“cpu”);结束

前に計算したパラメーターを使用して予測を非標準化します。

ypred = sig * ypred + mu;

学習の進行状況プロットには,標準化されたデータから計算された平方根平均二乗誤差(RMSE)が報告されます。非標準化された予測からRMSEを計算します。

欧美=人数((2:结束);rmse =√意味着(YPred-YTest)。^ 2))
rmse =248.5531

予測値と共に学習の時系列をプロットします。

图绘制(dataTrain (1: end-1))idx = numTimeStepsTrain:(numTimeStepsTrain + numTimeStepsTest);情节(idx (numTimeStepsTrain) YPred][数据,“。”) 抓住Xlabel(“月”)ylabel(“案例”)标题(“预测”) 传奇([“观察”“预测”])

予測値をテストデータと比較します。

图形子图(2,1,1)绘图(ytest)保持情节(YPred“。”) 抓住传奇([“观察”“预测”]) ylabel (“案例”)标题(“预测”) subplot(2,1,2) stem(YPred - YTest) xlabel(“月”)ylabel(“错误”)标题(“rmse =”+ rmse)

観測値によるネットワークの状態の更新



まず,ネットワークの状態を初期化します。新しいシーケンスについて予測を行うには,重置静止を使用してネットワークの状態をリセットします。ネットワークの状態をリセットすると,前の予測が新しいデータについての予測に影響を与えるのを防ぐことができます。ネットワークの状態をリセットしてから,学習データに対して予測を行い,ネットワークの状態を初期化します。

net = ResetState(网络);net = predictandanddattestate(net,xtrain);

タイムタイムステップごとにをいいいごとにににごとごとごとししを予测予测てししを予测て次次いごとごとてステップ予测ごとごとごとにいいいいいいいいごとごといいいごとごとごとごといいいいごといいいごとごといいいごとごとごとpredictAndUpdateState“ExecutionEnvironment”オプションを“cpu”に設定します。

Ypred = [];numtimestepstest = numel(xtest);i = 1:numtimestepstest [net,ypred(:,i)] = predictandanddattestate(net,xtest(:,i),“ExecutionEnvironment”“cpu”);结束

前に計算したパラメーターを使用して予測を非標準化します。

ypred = sig * ypred + mu;

平方根平均二乗誤差(RMSE)を計算します。

rmse =√意味着(YPred-YTest)。^ 2))
RMSE = 158.0959.

予測値をテストデータと比較します。

图形子图(2,1,1)绘图(ytest)保持情节(YPred“。”) 抓住传奇([“观察”“预料到的”]) ylabel (“案例”)标题(“通过更新预测”) subplot(2,1,2) stem(YPred - YTest) xlabel(“月”)ylabel(“错误”)标题(“rmse =”+ rmse)

.

参考

|||

関連するトピック