2016-09-28 114 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

相关问题