Регрессивное предсказание итерационных временных рядов с сохранением состояния LSTM - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь обернуть голову вокруг сохраняющих состояние LSTM в Керасе, поэтому я придумал следующий пример:

Я хотел бы предсказать последовательность Y (n) = X (n) + Y (n- 1).

Код для генерации данных:

samples = 1000000
X = np.random.randn(samples).reshape(1000, 100, 10, 1)
Y = np.zeros((1000, 100, 1))
for i in range(X.shape[0]):
    for j in range(X[i].shape[0]):
        y_it = (Y[i][j-1] if j>0 else 0)
        Y[i][j] = y_it + np.sum(X[i][j])

В основном я генерирую 1000 выборок, каждая из которых содержит 100 временных рядов с 10 шагами и 1 функцией. Для каждого временного ряда у меня есть одно вычисленное значение (так, что оно много к одному).

Итак, вкратце:

X имеет форму 1000x100x10x1, а Y имеет форму 1000x100x1

Далее я делю данные на x_train, y_train и x_test, y_test для обучения и тестирования данных (первые 800 образцов идут на обучение, 200 для тестирования).

Я использую LSTM с отслеживанием состояния, так как сеть должна отслеживать состояние между сериями:

x_in = Input(batch_shape=[100, 10, 1])
lstm = LSTM(40, return_sequences=False, stateful=True)
dense = Dense(1)
model = keras.Model(inputs=x_in, outputs=dense(lstm(x_in)))
model.summary()
model.compile(optimizer=keras.optimizers.RMSprop(), loss='mean_squared_error', metrics=['mse'])

И мой метод обучения выглядит следующим образом:

for _ in range(100):
    for i in range(x_train.shape[0]):
        model.reset_states()
        model.fit(x_train[i], y_train[i], epochs=1, verbose=0, batch_size=100)

Проблема в том, что результаты не очень хорошо соответствуют тестовым данным. MSE довольно большой, и вот три случайных графика, где зеленый цвет представляет прогноз и данные синего теста: enter image description here

enter image description here enter image description here

Я думал, что поддержания внутреннего состояния будет достаточно для передачи информации о результатах предыдущих шагов, но, похоже, он не работает должным образом. Я что-то упустил фундаментальное?

...