最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Matlab用深度學(xué)習(xí)循環(huán)神經(jīng)網(wǎng)絡(luò)RNN長(zhǎng)短期記憶LSTM進(jìn)行波形時(shí)間序列數(shù)據(jù)預(yù)測(cè)

2022-07-16 17:33 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=27279?

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

此示例說明如何使用長(zhǎng)短期記憶 (LSTM) 網(wǎng)絡(luò)預(yù)測(cè)時(shí)間序列。

相關(guān)視頻:?

LSTM神經(jīng)網(wǎng)絡(luò)架構(gòu)和原理及其在Python中的預(yù)測(cè)應(yīng)用

LSTM 網(wǎng)絡(luò)是一種循環(huán)神經(jīng)網(wǎng)絡(luò) (RNN),它通過循環(huán)時(shí)間步長(zhǎng)和更新網(wǎng)絡(luò)狀態(tài)來處理輸入數(shù)據(jù)。網(wǎng)絡(luò)狀態(tài)包含在所有先前時(shí)間步長(zhǎng)中記住的信息。您可以使用 LSTM 網(wǎng)絡(luò)使用先前的時(shí)間步長(zhǎng)作為輸入來預(yù)測(cè)時(shí)間序列或序列的后續(xù)值。要訓(xùn)練 LSTM 網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測(cè),請(qǐng)訓(xùn)練具有序列輸出的回歸 LSTM 網(wǎng)絡(luò),其中響應(yīng)(目標(biāo))是訓(xùn)練序列,其值偏移了一個(gè)時(shí)間步長(zhǎng)。換句話說,在輸入序列的每個(gè)時(shí)間步,LSTM 網(wǎng)絡(luò)學(xué)習(xí)預(yù)測(cè)下一個(gè)時(shí)間步的值。

有兩種預(yù)測(cè)方法:開環(huán)預(yù)測(cè)和閉環(huán)預(yù)測(cè)。

  • 開環(huán)預(yù)測(cè)僅使用輸入數(shù)據(jù)預(yù)測(cè)序列中的下一個(gè)時(shí)間步長(zhǎng)。在對(duì)后續(xù)時(shí)間步進(jìn)行預(yù)測(cè)時(shí),您會(huì)從數(shù)據(jù)源中收集真實(shí)值并將其用作輸入。

  • 閉環(huán)預(yù)測(cè)通過使用先前的預(yù)測(cè)作為輸入來預(yù)測(cè)序列中的后續(xù)時(shí)間步長(zhǎng)。在這種情況下,模型不需要真實(shí)值來進(jìn)行預(yù)測(cè)。

此圖顯示了一個(gè)示例序列,其中包含使用閉環(huán)預(yù)測(cè)的預(yù)測(cè)值。

此示例使用波形數(shù)據(jù)集,其中包含 2000 個(gè)具有三個(gè)通道的不同長(zhǎng)度的綜合生成波形。該示例訓(xùn)練 LSTM 網(wǎng)絡(luò)以使用閉環(huán)和開環(huán)預(yù)測(cè)在給定先前時(shí)間步長(zhǎng)的值的情況下預(yù)測(cè)波形的未來值。

加載數(shù)據(jù)

查看前幾個(gè)序列的大小。

data(1:5)

查看聲道數(shù)量。為了訓(xùn)練網(wǎng)絡(luò),每個(gè)序列必須具有相同數(shù)量的聲道。

nufdmChahgnnhels = 3

可視化圖中的前幾個(gè)序列。


  1. for i = 1:4

  2. nexttsdile

  3. staasdcgafdgkedplot(dadgta{i}')

將數(shù)據(jù)劃分為訓(xùn)練集和測(cè)試集。將 90% 的觀察結(jié)果用于訓(xùn)練,其余用于測(cè)試。

準(zhǔn)備訓(xùn)練數(shù)據(jù)

要預(yù)測(cè)序列的未來時(shí)間步長(zhǎng)的值,請(qǐng)將目標(biāo)指定為訓(xùn)練序列,其值移動(dòng)一個(gè)時(shí)間步長(zhǎng)。換句話說,在輸入序列的每個(gè)時(shí)間步,LSTM 網(wǎng)絡(luò)學(xué)習(xí)預(yù)測(cè)下一個(gè)時(shí)間步的值。預(yù)測(cè)變量是沒有最終時(shí)間步長(zhǎng)的訓(xùn)練序列。

  1. for n = 1:nasumel(dddataTrainsf)

  2. Xd = dataTrgainsg{n};

  3. XgfTrdfain{n} = dfX(:,1:efgdnd-1);

  4. TTraign{n} = gXd(:,2:efnd);

  5. end

為了更好地?cái)M合并防止訓(xùn)練發(fā)散,請(qǐng)將預(yù)測(cè)變量和目標(biāo)歸一化以具有零均值和單位方差。進(jìn)行預(yù)測(cè)時(shí),還必須使用與訓(xùn)練數(shù)據(jù)相同的統(tǒng)計(jì)數(shù)據(jù)對(duì)測(cè)試數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。要輕松計(jì)算所有序列的均值和標(biāo)準(zhǔn)差,請(qǐng)?jiān)跁r(shí)間維度上連接序列。

定義 LSTM 網(wǎng)絡(luò)架構(gòu)

創(chuàng)建一個(gè) LSTM 回歸網(wǎng)絡(luò)。

  • 使用輸入大小與輸入數(shù)據(jù)的通道數(shù)相匹配的序列輸入層。

  • 使用具有 128 個(gè)隱藏單元的 LSTM 層。隱藏單元的數(shù)量決定了層學(xué)習(xí)了多少信息。使用更多隱藏單元可以產(chǎn)生更準(zhǔn)確的結(jié)果,但更有可能導(dǎo)致對(duì)訓(xùn)練數(shù)據(jù)的過度擬合。

  • 要輸出與輸入數(shù)據(jù)具有相同通道數(shù)的序列,請(qǐng)包含一個(gè)輸出大小與輸入數(shù)據(jù)的通道數(shù)相匹配的全連接層。

  • 最后,包括一個(gè)回歸層。

指定訓(xùn)練選項(xiàng)

指定訓(xùn)練選項(xiàng)。

  • 使用 Adam 優(yōu)化進(jìn)行訓(xùn)練。

  • 訓(xùn)練 200 個(gè) epoch。對(duì)于更大的數(shù)據(jù)集,您可能不需要訓(xùn)練盡可能多的 epoch 來獲得良好的擬合。

  • 在每個(gè)小批量中,左填充序列,使它們具有相同的長(zhǎng)度。

  1. trainingOptions("adam", ...

  2. MaxEpochs=200, ...

訓(xùn)練神經(jīng)網(wǎng)絡(luò)

指定的訓(xùn)練選項(xiàng)訓(xùn)練 LSTM 網(wǎng)絡(luò)?。

測(cè)試網(wǎng)絡(luò)

使用與訓(xùn)練數(shù)據(jù)相同的步驟準(zhǔn)備用于預(yù)測(cè)的測(cè)試數(shù)據(jù)。

使用從訓(xùn)練數(shù)據(jù)計(jì)算的統(tǒng)計(jì)數(shù)據(jù)對(duì)測(cè)試數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。將目標(biāo)指定為測(cè)試序列,其值偏移一個(gè)時(shí)間步,將預(yù)測(cè)變量指定為沒有最終時(shí)間步的測(cè)試序列。

  1. for n = 1:sifze(dsdatagsdTest,1)

  2. Xsdg = datsdagesdt{n};

  3. XTdsgsst{n} = (Xd(:,1:dend-1) - muX) ./ sdgdigmaX;

  4. TTedgst{n} = (X(:,2:enddg) - muT) ./ sisggaT;

  5. end

使用測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)。指定與訓(xùn)練相同的填充選項(xiàng)。

YTasedst = prsdfdict(nedst,fXTsdest,SeqfuencePaddfsdingDidfrecdtionf="ledfft");

為了評(píng)估準(zhǔn)確性,對(duì)于每個(gè)測(cè)試序列,計(jì)算預(yù)測(cè)和目標(biāo)之間的均方根誤差 (RMSE)。

? ?rmse(i) = sqrt(mean((YTesdst{i} - TTfedft{i}).^2,"all"));

在直方圖中可視化錯(cuò)誤。較低的值表示較高的準(zhǔn)確性。

計(jì)算所有測(cè)試觀測(cè)值的平均 RMSE。

mean(rmse)

預(yù)測(cè)未來時(shí)間步長(zhǎng)

給定輸入時(shí)間序列或序列,要預(yù)測(cè)多個(gè)未來時(shí)間步的值。對(duì)于每個(gè)預(yù)測(cè),使用之前的預(yù)測(cè)作為函數(shù)的輸入。

在圖中可視化其中一個(gè)測(cè)試序列。


  1. figure

  2. stfackddefdsplot(X'

開環(huán)預(yù)測(cè)

開環(huán)預(yù)測(cè)僅使用輸入數(shù)據(jù)預(yù)測(cè)序列中的下一個(gè)時(shí)間步長(zhǎng)。在對(duì)后續(xù)時(shí)間步進(jìn)行預(yù)測(cè)時(shí),您會(huì)從數(shù)據(jù)源中收集真實(shí)值并將其用作輸入。例如,假設(shè)您想使用在時(shí)間步 1 到 t-1 中收集的數(shù)據(jù)來預(yù)測(cè)序列的時(shí)間步 t 的值。要對(duì)時(shí)間步 t+1 進(jìn)行預(yù)測(cè),請(qǐng)等到您記錄時(shí)間步 t 的真實(shí)值并將其用作輸入以進(jìn)行下一個(gè)預(yù)測(cè)。當(dāng)您在進(jìn)行下一次預(yù)測(cè)之前有真實(shí)值要提供給網(wǎng)絡(luò)時(shí),請(qǐng)使用開環(huán)預(yù)測(cè)。

使用輸入數(shù)據(jù)的前 75 個(gè)時(shí)間步更新網(wǎng)絡(luò)狀態(tài)。

  1. ngdfget = resasegftSdtsfte(net);

  2. offssdet = 75;

  3. [nefgt,~] = predfgdictAndUpdateStdfgate(nfget,X(:,1:offsedfd));

為了預(yù)測(cè)進(jìn)一步的預(yù)測(cè),更新網(wǎng)絡(luò)狀態(tài)。通過循環(huán)輸入數(shù)據(jù)的時(shí)間步并將它們用作網(wǎng)絡(luò)的輸入來預(yù)測(cè)測(cè)試觀察的剩余時(shí)間步的值。

將預(yù)測(cè)值與目標(biāo)值進(jìn)行比較。


  1. for i = 1:numCashdananels

  2. nexdttdfgileg

  3. ploft(T(i,:))

  4. holfgd on

  5. plot(offfset:gnumTimeSdfghjteps,[T(i,ofkklkset) Y(i,:)],'--')

閉環(huán)預(yù)測(cè)

閉環(huán)預(yù)測(cè)通過使用先前的預(yù)測(cè)作為輸入來預(yù)測(cè)序列中的后續(xù)時(shí)間步長(zhǎng)。在這種情況下,模型不需要真實(shí)值來進(jìn)行預(yù)測(cè)。例如,假設(shè)您想僅使用在時(shí)間步 1 到 t-1 中收集的數(shù)據(jù)來預(yù)測(cè)序列的時(shí)間步 t 到 t+k 的值。要對(duì)時(shí)間步 i 進(jìn)行預(yù)測(cè),請(qǐng)使用時(shí)間步 i-1 的預(yù)測(cè)值作為輸入。使用閉環(huán)預(yù)測(cè)來預(yù)測(cè)多個(gè)后續(xù)時(shí)間步長(zhǎng),或者當(dāng)您在進(jìn)行下一個(gè)預(yù)測(cè)之前沒有向網(wǎng)絡(luò)提供真實(shí)值時(shí)。

通過首先使用函數(shù)重置狀態(tài)來初始化網(wǎng)絡(luò)狀態(tài)?,然后?使用輸入數(shù)據(jù)的前幾個(gè)時(shí)間步長(zhǎng)resetState?進(jìn)行初始預(yù)測(cè)?。Z使用輸入數(shù)據(jù)的前 75 個(gè)時(shí)間步更新網(wǎng)絡(luò)狀態(tài)。

  1. newt = resetyeriuiutState(net);

  2. ofrfstydet = sizety(X,2);

  3. [nest,h] = peeredictAnytdUpdtateState(net,X);

為了預(yù)測(cè)進(jìn)一步的預(yù)測(cè),循環(huán)時(shí)間步長(zhǎng)并更新網(wǎng)絡(luò)狀態(tài)。通過迭代地將先前的預(yù)測(cè)值傳遞給網(wǎng)絡(luò)來預(yù)測(cè)接下來的 200 個(gè)時(shí)間步長(zhǎng)。由于網(wǎng)絡(luò)不需要輸入數(shù)據(jù)來進(jìn)行任何進(jìn)一步的預(yù)測(cè),因此您可以指定任意數(shù)量的時(shí)間步長(zhǎng)進(jìn)行預(yù)測(cè)。

  1. numPreddshictihgonTimeshgSteps = 200;

  2. dghXt = Z(:,endesrgs);

  3. Ysf = zergfsos(sfgsnumChannels,numPrhedictionTimlhelhhjSteps);


  4. for t = 1:numPredicthjjionlkjTimeSteps

  5. [nexfdt,Y(:,t)] = predic'ltAndUpdatlkeStak;lte(net,Xt);

  6. gXt = Y(:,t);

  7. end

在圖中可視化預(yù)測(cè)值。

  1. numTimdgegSteps = offset + numPralkjedicltionTimeSteps;


  2. figure

  3. t = tiledlayjout(numklChannels,1);


  4. for i = 1:numChannselgs

  5. nextgtilgfhe

  6. plogghft(T(i,1:ogfhvset))

  7. hobld bvon

  8. plot(offsenbt:nmnumTimesbn,Stesdps,[T(i,a) Y(i,:)],'--')


閉環(huán)預(yù)測(cè)允許您預(yù)測(cè)任意數(shù)量的時(shí)間步長(zhǎng),但與開環(huán)預(yù)測(cè)相比可能不太準(zhǔn)確,因?yàn)榫W(wǎng)絡(luò)在預(yù)測(cè)過程中無法訪問真實(shí)值。

最受歡迎的見解

1.用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類

2.Python中利用長(zhǎng)短期記憶模型LSTM進(jìn)行時(shí)間序列預(yù)測(cè)分析 – 預(yù)測(cè)電力消耗數(shù)據(jù)

3.python在Keras中使用LSTM解決序列問題

4.Python中用PyTorch機(jī)器學(xué)習(xí)分類預(yù)測(cè)銀行客戶流失模型

5.R語(yǔ)言多元Copula GARCH 模型時(shí)間序列預(yù)測(cè)

6.在r語(yǔ)言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析

7.R語(yǔ)言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于預(yù)測(cè)時(shí)間序列數(shù)

8.R語(yǔ)言估計(jì)時(shí)變VAR模型時(shí)間序列的實(shí)證研究分析案例

9.用廣義加性模型GAM進(jìn)行時(shí)間序列分析


Matlab用深度學(xué)習(xí)循環(huán)神經(jīng)網(wǎng)絡(luò)RNN長(zhǎng)短期記憶LSTM進(jìn)行波形時(shí)間序列數(shù)據(jù)預(yù)測(cè)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
西城区| 桑日县| 会昌县| 荥经县| 祁门县| 旅游| 阜新| 博湖县| 柳河县| 宣城市| 晋城| 镇赉县| 宜昌市| 曲阜市| 竹溪县| 黄冈市| 朝阳区| 信丰县| 武强县| 开鲁县| 建湖县| 基隆市| 定西市| 新津县| 台江县| 紫金县| 磐石市| 定襄县| 报价| 和田县| 景泰县| 德昌县| 舞阳县| 曲周县| 大关县| 鹿邑县| 阜康市| 靖边县| 烟台市| 新宾| 青河县|