2017-04-11 2899 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或其他任何其他值預測,則可能沒有可靠的結果。