2016-09-28 147 views
2

我瞭解Keras中的stateful LSTM prediction example單一序列。這個例子有一個50k觀察序列。用keras和多個序列進行時間序列預測

我的問題:

  • ,如果你想培養的50K觀察多個序列是什麼?說一個開始/結束於不同的值,並有一個稍微不同的行爲?
  • 如何修改示例以增加預測時間步長?
  • LSTMs甚至對這種事情有益嗎?

具有3個均值回覆時間序列並預測出20個步驟的完全可複製示例。

# generate random data 
import statsmodels.api as sm 
import numpy as np 
import pandas as pd 

cfg_t_total = 25000 
cfg_t_step = 20 
cfg_batch_size = 100 

np.random.seed(12345) 
arparams = np.array([.75, -.25]) 
maparams = np.array([.65, .35]) 
ar = np.r_[1, -arparams] # add zero-lag and negate 
ma = np.r_[1, maparams] # add zero-lag 
y0 = sm.tsa.arma_generate_sample(ar, ma, cfg_t_total) 
y1 = sm.tsa.arma_generate_sample(ar, ma, cfg_t_total) 
y2 = sm.tsa.arma_generate_sample(ar, ma, cfg_t_total) 

df=pd.DataFrame({'a':y0,'b':y1,'c':y2}) 

df.head(100).plot() 

df.head(5) 

# create training data format 
X = df.unstack() 
y = X.groupby(level=0).shift(-cfg_t_step) 

idx_keep = ~(y.isnull()) 
X = X.ix[idx_keep] 
y = y.ix[idx_keep] 

from keras.models import Sequential 
from keras.layers import Dense, LSTM 

# LSTM taken from https://github.com/fchollet/keras/blob/master/examples/stateful_lstm.py 
# how to do this...?! 
print('Creating Model') 
model = Sequential() 
model.add(LSTM(50, 
       batch_input_shape=(cfg_batch_size, cfg_t_step, 1), 
       return_sequences=True, 
       stateful=True)) 
model.add(LSTM(50, 
       batch_input_shape=(cfg_batch_size, cfg_t_step, 1), 
       return_sequences=False, 
       stateful=True)) 
model.add(Dense(1)) 
model.compile(loss='mse', optimizer='rmsprop') 

model.fit(X, y, batch_size=cfg_batch_size, verbose=2, validation_split=0.25, nb_epoch=1, shuffle=False) 

回答

0

看看Philippe Remy的blog post。它解釋瞭如何在keras中使用有狀態的LSTM。

+0

謝謝,我讀過。我不瞭解你,但它並沒有幫助我回答我的問題。沒有代碼,它不涉及多個序列。 – citynorman

+0

他實現並描述了一個有狀態LSTM的玩具示例,該示例在「掌握有狀態模型」部分的多個序列中進行訓練。 – bruThaler

相關問題