欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch 如何實現(xiàn)LSTM時間序列預(yù)測

 更新時間:2021年05月17日 09:29:45   作者:CodeInHand  
本文主要基于Pytorch深度學(xué)習(xí)框架,實現(xiàn)LSTM神經(jīng)網(wǎng)絡(luò)模型,用于時間序列的預(yù)測

開發(fā)環(huán)境說明:

Python 35

Pytorch 0.2

CPU/GPU均可

1、LSTM簡介

人類在進行學(xué)習(xí)時,往往不總是零開始,學(xué)習(xí)物理你會有數(shù)學(xué)基礎(chǔ)、學(xué)習(xí)英語你會有中文基礎(chǔ)等等。

于是對于機器而言,神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)亦可不再從零開始,于是出現(xiàn)了Transfer Learning,就是把一個領(lǐng)域已訓(xùn)練好的網(wǎng)絡(luò)用于初始化另一個領(lǐng)域的任務(wù),例如會下棋的神經(jīng)網(wǎng)絡(luò)可以用于打德州撲克。

我們這講的是另一種不從零開始學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)——循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN),它的每一次迭代都是基于上一次的學(xué)習(xí)結(jié)果,不斷循環(huán)以得到對于整體序列的學(xué)習(xí),區(qū)別于傳統(tǒng)的MLP神經(jīng)網(wǎng)絡(luò),這種神經(jīng)網(wǎng)絡(luò)模型存在環(huán)型結(jié)構(gòu),

具體下所示:

上圖是RNN的基本單元,通過不斷循環(huán)迭代展開模型如下所示,圖中ht是神經(jīng)網(wǎng)絡(luò)的在t時刻的輸出,xt是t時刻的輸入數(shù)據(jù)。

這種循環(huán)結(jié)構(gòu)對時間序列數(shù)據(jù)能夠很好地建模,例如語音識別、語言建模、機器翻譯等領(lǐng)域。

但是普通的RNN對于長期依賴問題效果比較差,當(dāng)序列本身比較長時,由于神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練是采用backward進行,在梯度鏈?zhǔn)椒▌t中容易出現(xiàn)梯度消失和梯度爆炸的問題,需要進一步改進RNN的模型結(jié)構(gòu)。

針對Simple RNN存在的問題,LSTM網(wǎng)絡(luò)模型被提出,LSTM的核心是修改了增添了Cell State,即加入了LSTM CELL,通過輸入門、輸出門、遺忘門把上一時刻的hidden state和cell state傳給下一個狀態(tài)。

如下所示:

遺忘門:ft = sigma(Wf*[ht-1, xt] + bf)

輸入門:it = sigma(Wi*[ht-1, xt] + bi)

cell state initial: C't = tanh(Wc*[ht-1, xt] +bc)

cell state: Ct = ft*Ct-1+ itC't

輸出門:ot = sigma(Wo*[ht-1, xt] + bo)

模型輸出:ht = ot*tanh(Ct)

LSTM有很多種變型結(jié)構(gòu),實際工程化過程中用的比較多的是peephole,就是計算每個門的時候增添了cell state的信息,有興趣的童鞋可以專研專研。

上一部分簡單地介紹了LSTM的模型結(jié)構(gòu),下邊將具體介紹使用LSTM模型進行時間序列預(yù)測的具體過程。

2、數(shù)據(jù)準(zhǔn)備

對于時間序列,本文選取正弦波序列,事先產(chǎn)生一定數(shù)量的序列數(shù)據(jù),然后截取前部分作為訓(xùn)練數(shù)據(jù)訓(xùn)練LSTM模型,后部分作為真實值與模型預(yù)測結(jié)果進行比較。正弦波的產(chǎn)生過程如下:

SeriesGen(N)方法用于產(chǎn)生長度為N的正弦波數(shù)值序列;

trainDataGen(seq,k)用于產(chǎn)生訓(xùn)練或測試數(shù)據(jù),返回數(shù)據(jù)結(jié)構(gòu)為輸入輸出數(shù)據(jù)。seq為序列數(shù)據(jù),k為LSTM模型循環(huán)的長度,使用1~k的數(shù)據(jù)預(yù)測2~k+1的數(shù)據(jù)。

3、模型構(gòu)建

Pytorch的nn模塊提供了LSTM方法,具體接口使用說明可以參見Pytorch的接口使用說明書。此處調(diào)用nn.LSTM構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò),模型另增加了線性變化的全連接層Linear(),但并未加入激活函數(shù)。由于是單個數(shù)值的預(yù)測,這里input_size和output_size都為1.

4、訓(xùn)練和測試

(1)模型定義、損失函數(shù)定義

(2)訓(xùn)練與測試

(3)結(jié)果展示

比較模型預(yù)測序列結(jié)果與真實值之間的差距

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Python之Matlibplot畫圖功能演示過程

    Python之Matlibplot畫圖功能演示過程

    這篇文章主要介紹了Python之Matlibplot畫圖功能演示過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實現(xiàn)在線音樂播放器

    Python實現(xiàn)在線音樂播放器

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)在線音樂播放器的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Python實現(xiàn)GUI學(xué)生管理系統(tǒng)的示例代碼

    Python實現(xiàn)GUI學(xué)生管理系統(tǒng)的示例代碼

    這篇文章主要為大家介紹了如何留Python語言實現(xiàn)簡易的GUI學(xué)生管理系統(tǒng),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考下
    2022-06-06
  • PyTorch中torch.utils.data.DataLoader實例詳解

    PyTorch中torch.utils.data.DataLoader實例詳解

    torch.utils.data.DataLoader主要是對數(shù)據(jù)進行batch的劃分,下面這篇文章主要給大家介紹了關(guān)于PyTorch中torch.utils.data.DataLoader的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步

    Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步

    這篇文章主要介紹了Python多線程編程(七):使用Condition實現(xiàn)復(fù)雜同步,本文講解通過很著名的“生產(chǎn)者-消費者”模型來來演示在Python中使用Condition實現(xiàn)復(fù)雜同步,需要的朋友可以參考下
    2015-04-04
  • python代碼中怎么換行

    python代碼中怎么換行

    這篇文章主要介紹了python代碼中怎么換行的相關(guān)知識點以及方法,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 使用已經(jīng)得到的keras模型識別自己手寫的數(shù)字方式

    使用已經(jīng)得到的keras模型識別自己手寫的數(shù)字方式

    這篇文章主要介紹了使用已經(jīng)得到的keras模型識別自己手寫的數(shù)字方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python中那些 Pythonic的寫法詳解

    Python中那些 Pythonic的寫法詳解

    這篇文章主要介紹了Python中那些 Pythonic的寫法詳解,一份優(yōu)雅、干凈、整潔的代碼通常自帶文檔和注釋屬性,讀代碼即是讀作者的思路,需要的朋友可以參考下
    2019-07-07
  • Python串口通信的接收與發(fā)送的實現(xiàn)

    Python串口通信的接收與發(fā)送的實現(xiàn)

    串口通信是指通過串口進行數(shù)據(jù)傳輸?shù)囊环N通信方式,本文就來介紹一下Python串口通信的接收與發(fā)送的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • Python去掉字符串中空格的方法

    Python去掉字符串中空格的方法

    這篇文章主要介紹了Python中去掉字符串中空格的方法,使用了strip()、lstrip()、rstrip()函數(shù),需要的朋友可以參考下
    2014-03-03

最新評論