Eu sou novo no aprendizado profundo e LSTM (com keras). Estou tentando resolver uma previsão de séries temporais com vários passos à frente. Eu tenho três séries temporais: A, B e C e quero prever os valores de C. Estou treinando um LSTM alimentando 3 passos para trás nos pontos de dados para prever os próximos 3 passos no futuro. Os dados de entrada são parecidos com:
X = [[[A0, B0, C0],[A1, B1, C1],[A2, B2, C2]],[[ ...]]]
com dimensões: (1000, 3, 3)
. A saída é:
y = [[C3, C4, C5],[C4, C5, C6],...]
com dimensões: (1000, 3)
.
Estou usando um LSTM simples com 1 camada oculta (50 neurônios). Eu configurei um LSTM com keras como:
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)
Este modelo funciona bem. Agora, eu gostaria de prever os valores de B também (usando a mesma entrada). Por isso, tentei remodelar a saída de maneira semelhante à do treinamento com vários recursos:
y = [[[B3, C3],[B4, C4],[B5, C5]],[[ ...]]]
de modo que ele tem dimensões: (1000, 3, 2)
. No entanto, isso me dá um erro:
Error when checking target: expected activation_5 to have 2 dimensions,
but got array with shape (1000, 3, 2)
Eu acho que a estrutura da rede precisa mudar. Eu tentei modificar model.add(Dense(input_dim=neurons, output_dim=ahead))
sem sucesso. Devo remodelar o y
diferente? A estrutura da rede está errada?