2017-10-17 10 views
1

私は1025643エントリと72個の機能/属性のテストデータを持っています。私は、形状(245,30,72)の入力データtrainXと形状(245、)のtrainYを持つlstmを訓練しました。また、私は30回戻って(245,30,72)形のtrainXになるようにルックバックを指定しました。私はlstmモデルのOutput_shape

model.output_shape

をすれば

は今モデルを訓練した後、出力は次のようになります。

私は理解して何を(なし、1)

は、それが与えるということではありませんテストセットの1ステップ予測。しかし、テストセットのすべての行について、予測の30行(将来のステップごとに1つ)が必要です。(出力が私の場合は(1025643,30,1)になるはずです)。データシェイプではどのような変更を行う必要がありますか?テンソルフローバックエンドとPython 3.6でkeras lstmを使用しています。私のモデルの

コードは次のとおりです。

model = Sequential() 
model.add(LSTM(100, return_sequences=True, input_shape = (trainX.shape[1], trainX.shape[2]))) 
model.add(LSTM(100, return_sequences = False)) 
model.add(Dense(1, activation='linear')) 

model.compile(loss='mse', optimizer='adam') 

model.fit(trainX, trainY, epochs=50, shuffle=False, verbose=1) 

答えて

1

最後LSTM層上return_sequences=FalseパラメータはLSTMが唯一の全30時間ステップ後に出力を返すようになります。最後のLSTMレイヤーでreturn_sequences=Trueを30出力(各時間ステップの後に1つ)したい場合、出力形状は(None, 30, 1)になります。

KerasのLSTMの詳細については、hereを参照してください。

+0

ありがとう:)モデルがそうするように頼んでいるので、今度は、テストデータの各サンプルについて、30のタイムステップをシェイプ(None、30、1)にする必要がありますか?もし私が単一の行だけを提供したいのであれば、モデルは30行(30のタイムステップを順番に)出力します。私のテストデータにはまだ形状(1025643,72)があり、結果には形状(1025643,30,1)があります。 –

+0

私が正しく理解していれば、1回の入力ステップを提供し、次の30回の出力ステップを生成したいと考えています。 LSTMには、各タイムステップの入力が必要です。 1つの入力から30のタイムステップを生成するには、各タイムステップで最初の入力を複製するか、次のタイムステップの入力としてLSTMの出力を使用します(LSTMの入力ディメンションは出力と一致しません。後者のオプションはあなたのアーキテクチャでは不可能です)。 –

+0

ええ、複製という考え方が理にかなっています。ありがとうございました :) –

関連する問題