Я хочу предсказать определенные значения, которые можно прогнозировать на неделю (низкий SNR). Мне нужно предсказать весь временной ряд года, образованный неделями года (52 значения - рисунок 1)
Моей первой идеей было разработать модель LSTM "многие ко многим" (рисунок 2) с использованием Keras поверх TensorFlow. Я тренирую модель с 52 входным слоем (данный временной ряд предыдущего года) и 52 прогнозируемым выходным слоем (временной ряд следующего года). Форма train_X (X_examples, 52, 1), другими словами, X_examples для обучения, 52 временных шага по 1 объекту каждый. Я понимаю, что Keras будет рассматривать 52 входа как временной ряд одного и того же домена. Форма train_Y одинакова (y_examples, 52, 1). Я добавил слой TimeDistributed. Я думал, что алгоритм будет предсказывать значения как временные ряды, а не изолированные значения (я прав?)
Код модели в Керасе:
y = y.reshape(y.shape[0], 52, 1)
X = X.reshape(X.shape[0], 52, 1)
# design network
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
model.fit(X, y, epochs=n_epochs, batch_size=n_batch, verbose=2)
Проблема в том, что алгоритм не изучает пример. Он предсказывает значения, очень похожие на значения атрибутов. Правильно ли я моделирую проблему?
Второй вопрос: другая идея состоит в том, чтобы обучить алгоритм с 1 входом и 1 выходом, но затем во время теста, как я буду прогнозировать весь временной ряд 2015 года, не обращаясь к "1 входу"? Тестовые данные будут иметь другую форму, чем тренировочные данные.