2017-04-11 14 views
0

ケラスを使用してLSTMで時系列を予測しています。私たちが訓練したものと同じタイムステップではないデータを使用して予測できます。例:ケラスを使用する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タイムステップで予測しようとすると、どうやって動くのですか?

答えて

1

あなたの例でLSTMレイヤーが定義されている様子を見ると、時間ディメンションのサイズと、各時点で存在するフィーチャの数(input_dim)と、所望の出力フィーチャの数(output_dim)。また、return_sequences=Falseがあるので、結果は最後の時点でのみ出力されるので、レイヤによって生成されるテンソルは常に[バッチサイズ] x [出力が暗くなる](この場合は10 x 10)の形状になります。時間ディメンション

したがって、時間ディメンションのサイズは実際にモデルの「適用性」に影響を与えません。レイヤーはすべての利用可能なタイムステップを通過し、最後の出力を与えます。

もちろん、モデルがすべての入力に対してでもよくで動作することを意味するわけではありません。トレーニングデータのすべての例のサイズがNですが、N+1N-1100 * Nなどを使用して予測しようとすると、信頼できる結果が得られないことがあります。

関連する問題