ケラスとLSTMを使用したマルチステップ先予測の複数の出力


7

私はディープラーニングとLSTM(ケラを使用)を初めて使用します。私は、マルチステップ先の時系列予測を解決しようとしています。A、B、Cの3つの時系列があり、Cの値を予測したいと思います。LSTMをトレーニングして、データポイントを3ステップ戻し、将来の3ステップを予測しています。入力データは次のようになります。

X = [[[A0, B0, C0],[A1, B1, C1],[A2, B2, C2]],[[ ...]]]

寸法:(1000, 3, 3)。出力は次のとおりです。

y = [[C3, C4, C5],[C4, C5, C6],...]

寸法:(1000, 3)

1つの非表示レイヤー(50ニューロン)を持つ単純なLSTMを使用しています。私はケラスを使ってLSTMを次のように設定しました:

n_features = 3
neurons = 50
ahead = 3
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Dense(input_dim=neurons, output_dim=ahead))
model.add(Activation('linear'))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)

このモデルは正常に動作します。ここで、(同じ入力を使用して)Bの値も予測したいと思います。したがって、複数の機能を持つトレーニングの場合と同じように、出力を再形成しようとしました。

 y = [[[B3, C3],[B4, C4],[B5, C5]],[[ ...]]]

そのため、次のような寸法になります(1000, 3, 2)。ただし、これによりエラーが発生します。

Error when checking target: expected activation_5 to have 2 dimensions, 
but got array with shape (1000, 3, 2)

ネットワークの構造を変える必要があると思います。変更を試みましたがmodel.add(Dense(input_dim=neurons, output_dim=ahead))成功しませんでした。y別の形に変えるべきですか?ネットワークの構造は間違っていますか?


私も同様の問題に取り組んでいます。どのようにしてあなたのデータをどのように準備したのかについて私に相談していただけますか X = [[[A0、B0、C0]、[A1、B1、C1]、[A2、B2、C2]]、[[...]]]?私も質問があります。次の3ポイントを予測するときに、前の3ポイントを使用しましたか?しかし、5日を予測したい場合、予測された4日を使用しましたか?前もって感謝します?
osaozz

最後の高密度レイヤーの出力を3に変更すると、問題が解決する可能性があります
Kaustabh Ganguly

常に同じ長さでフィードし、同じ長さで出力する場合、実際にはどのような種類のRNNも必要ありません。使用しない場合は、より良い結果が得られる可能性があります。
kbrose 2018

回答:


1
model = Sequential()
model.add(LSTM(input_dim=n_features, output_dim=neurons))
model.add(Dropout(.2))
model.add(Flatten())
model.add(Dense(ahead))
model.compile(loss='mae', optimizer='adam')
model.fit(X, y, epochs=50)

違いは次のとおりです。

  • LSTMからの出力を平坦化しています。このシナリオでは、3Dテンソルと高密度レイヤーが得られるため、2Dテンソルが必要になると考えています。
  • 別の回答で提案された変更を変更しました。
  • デフォルト起動するので、活性層を削除しKeras緻密層ですlinear
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.