Python時間序列LSTM預測系列教程(3)-單變量

單變量LSTM預測模型(3)


教程原文連接


LSTM 建模


LSTM基礎


Keras 中 LSTM 的層維護一個 batch 的狀態
一個 batch = 來自訓練數據的確定個數的 rows , 他確定了在更新整個網絡權重前需要處理的 pattern 的個數
默認的,batchs 間的狀態會清空,通過調用 reset_states() 可以控制什麼時候清除 LSTM 層狀態

LSTM 層輸入格式:
爲矩陣,矩陣內容 [ samples, time steps, features ]
samples:來自 domain 的獨立觀測值,通常是 data 的行數據--就是行數
time steps:對於給定的觀測值,給定變量有單獨的時間步--就是時間窗口
features:在得到觀測值的時刻,觀測到的單獨的 measures--就是列數(屬性個數)

建模步驟


1、數據reshape爲LSTM輸入格式

X, y = train[:, 0:-1], train[:, -1]
X = X.reshape(X.shape[0], 1, X.shape[1])

2、LSTM層定義

layer = LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True)
batch_input_shape=表示每個batch需要讀取的數據格式(batch_size=每batch讀的數據行數,步長,屬性數)
neurons=神經元個數,即記憶單元個數,1~5 就很高效了
batch通常和epoch一起
epochs:確定網絡學習數據快慢,即權重的更新頻率

3、輸出定義

輸出層是單一的神經元,用的線性激活函數來預測下一時間步的數據

4、度量與優化定義

損失函數=用MSE
優化算法=用ADAM

5、編譯

model = Sequential()
model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
由於LSTM是有狀態的,需要在每個epoch裏面控制狀態更新
默認的
(1)在每個epoch裏的sample會被打亂,可以設置shuffle=False解決
(2)網絡會輸出debug信息,可以設置verbose=0解決

LSTM預測

兩種訓練/預測方式
(1)固定方式:將所有訓練數據fit到模型,然後從測試數據,每次預測一個
(2)動態方式:在測試數據階段,每次都會re-fit模型或更新模型








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章