私はディープラーニングと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