2017-04-11 2906 views
0

我正在使用keras预测LSTM的时间序列,并且我意识到我们可以使用与我们用来训练的时间步不同的数据来预测。例如:用LSTM中的不同时间步长预测使用keras

import numpy as np 
import keras.optimizers 
from keras.models import Sequential 
from keras.layers import Dense,Activation,Dropout,TimeDistributed 
from keras.layers import LSTM 

Xtrain = np.random.rand(10,3,2) #Here timestep is 3 
Ytrain = np.random.rand(10,1) 

model = Sequential() 
model.add(LSTM(input_dim = Xtrain.shape[2],output_dim =10,return_sequences = False)) 
model.add(Activation("sigmoid")) 
model.add(Dense(1)) 

KerasOptimizer = keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0) 
model.compile(loss="mse", optimizer=KerasOptimizer) 
model.fit(Xtrain,Ytrain,nb_epoch = 1,batch_size = 1) 

XBis = np.random.rand(10,4,2) #here timestep is 4 
XTer = np.random.rand(10,2,2) #here timestep is 2 

model.predict(Xtrain) 
model.predict(XBis) 
model.predict(XBis) 

所以我的问题是:为什么呢?如果我们用n时间步长训练模型,并且我们使用n+1时间步长的数据进行预测,可能该模型仅使用第一个n时间步长。但是如果我们试图用n-1时间步预测,它是如何工作的?

回答

1

如果你看看LSTM图层在你的例子中是如何定义的,你会注意到你并没有具体告诉时间维度的大小,只有在每个时间点出现的特征数量(input_dim)和所需输出功能的数量(output_dim)。此外,由于您有return_sequences=False,它只会输出最后一个时间点的结果,因此图层产生的张量将始终具有[批量大小] x [输出调光]形状(在本例中为10 x 10),放弃时间维度。

所以时间维度的大小并没有真正影响模型的“适用性”该层将会完成所有可用的时间步骤并为您提供最后的输出。

当然,这并不意味着对于任何输入,该模型将必然工作以及。如果您的培训数据中的所有示例的时间维度大小为N,但您尝试使用N+1,N-1100 * N或其他任何其他值预测,则可能没有可靠的结果。