2017-06-27 21 views
3

x(t)を25次元ベクトル、y(t)をターゲット(1 dim)とし、600個の連続した点(x(t)、y私はLSTMを訓練して、いくつかの追加のx(t)[t> 600]が与えられて、シリーズがどのように継続するかを予測したいと思います。私は、次のモデルを試してみました:フィッティング時系列予測のためのKeras LSTMの設定方法は?

model = Sequential() 
    model.add(LSTM(128, input_shape = (600,25), batch_size = 1, activation= 'tanh', return_sequences = True)) 
    model.add(Dense(1, activation='linear')) 
    model.compile(loss='mean_squared_error', optimizer='adam') 
    model.fit(trainX, trainY, epochs=20 ,verbose=2) prediction 

    prediction = model.predict(testX, batch_size = 1) 

が正常に動作しますが、私は予測ステップで次のエラーを取得しておいてください。

Error when checking : expected lstm_46_input to have shape (1, 600, 25) but got array with shape (1, 10, 25) 

私は何をしないのですか?ここで

は私形状です:

trainX.shape = (1,600,25) 
    trainY.shape = (1,600,1) 
    testX.shape = (1,10,25) 

答えて

3

LSTM(または任意のRNN)のKeras文書入力によると、層があなたの入力形状が

trainX.shape =(ある形状(batch_size, timesteps, input_dim)のものでなければなりません1,600,25)

つまり、タイムステップごとに600のタイムステップと25のフィーチャで1つのデータだけを渡すことを意味します。しかし、実際に600トレーニングデータのそれぞれが25タイムステップ数1タイムスタンプ毎にを持っていると感じています。入力形状(trainX)は600 x 25 x 1であるはずです。列車のターゲット(trainY)は600 x 1でなければなりません。私の前提が正しければ、テストデータの形状は10 x 25 x 1でなければなりません。あなたのトレーニングデータは、これはあなたが600回LSTMフィードバックをアンロールされている何を意味するのかという事実(1,600,25)である場合にはまずLSTM層は

model.add(LSTM(128, input_shape = (25,1), batch_size = 1, activation= 'tanh', return_sequences = False)) 
+2

また、yの形が正しい場合は、タイムステップごとの出力があるため、おそらく 'TimeDistributed(Dense(1)) 'が必要です。 –

1

のように記述する必要があります。最初の入力は600番目の入力に影響します。これが必要な場合は、Keras関数 "pad_sequences"を使用して、テスト行列にシェイプ(1,600,25)を付けるように追加ゼロを追加することができます。ネットワークはゼロを予測する必要があり、testYに590個のゼロを追加する必要があります。

あなたの現在のY予測に影響を与える10の前のタイムステップだけを言いたいなら、あなたはtrainXを形に変えたいと思うでしょう(590,10,25)。それはすでにあるので、次に、あなたのテストがうまく動作します

def formatTS(XX, yy, window_length): 
x_train = np.zeros((XX.shape[0]-window_length,window_length,XX.shape[1])) 
for i in range(x_train.shape[0]): 
    x_train[i] = XX[i:i+window_length,:] 
y_train = yy[window_length:] 
return x_train, y_train 

:あなたが望む形でそれを得るための処理は、このようなものになる可能性が

model.add(LSTM(n_hid, stateful=True, return_sequences=False, batch_input_shape=(1,nTS,x_train.shape[2]))) 

:入力行は次のようになります形状(1,10,25)。

関連する問題