我正在使用keras来预测LSTM的时间序列,我意识到我们可以预测使用的数据时间步长与我们训练的时间步长不同。例如:
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
时间步长进行预测,它是如何工作的?
答案 0 :(得分:2)
如果您查看示例中如何定义LSTM
图层,您会注意到您没有具体说明时间维度的大小,只是每个时间点的特征数量( input_dim
)以及所需输出要素的数量(output_dim
)。此外,由于你有return_sequences=False
它只会在最后一个时间点输出结果,所以由图层产生的张量将始终具有[批量大小] x [输出暗淡]的形状(在这种情况下,10 x 10),丢弃时间维度。
因此,时间维度的大小并未真正影响"适用性"模型;该图层将完成所有可用的时间步骤,并为您提供最后的输出。
当然,这并不意味着模型对于任何输入都必须好。如果您的训练数据中的所有示例都具有大小为N
的时间维度,但您尝试使用N+1
,N-1
,100 * N
或其他任何内容进行预测,则可能不会有可靠的结果。