Изменение формы данных для соответствия многомерной модели временных рядов LSTM с распределенной по времени оболочкой - PullRequest
0 голосов
/ 15 января 2020

У меня есть набор данных, состоящий из почасовых данных за последние 7 лет.

Я пытаюсь использовать поезд для прогнозирования одной переменной (цены) за 24 часа, основываясь на 168 часах (1 неделе) Хронология c данных для всех переменных, включая цену.

Для этого я пытаюсь построить NN со слоем LSTM и слоем с распределением по времени, однако изо всех сил пытаюсь понять форму прихода возвращаемых данных с каждого слоя.

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

X_train.shape, Y_train.shape, X_valid.shape, Y_valid.shape, X_test.shape, Y_test.shape

((43800, 168, 6),
 (43800, 24),
 (8760, 168, 6),
 (8760, 24),
 (8574, 168, 6),
 (8574, 24))

Таким образом, тренировочные данные (X) состоят из 43800 выборок, оглядываясь назад. более 168 часов, для 6 функций. Y - 43800 образцов, прогноз на каждый час на 24 часа вперед. В настоящее время я пытаюсь запустить модель

model8 = keras.models.Sequential([
    keras.layers.LSTM(10, input_shape=(X_train.shape[1], X_train.shape[2]), return_sequences = True),
    keras.layers.LSTM(20, return_sequences= True),
    keras.layers.TimeDistributed(keras.layers.Dense(24))
])

model8.compile(loss="mape", optimizer="adam")
history = model8.fit(X_train, Y_train, epochs=2,
                    validation_data=(X_valid, Y_valid))

ValueError: Error when checking target: expected time_distributed_26 to have shape (168, 24) but got array with shape (24, 1)

. Любая помощь будет принята с благодарностью, так как я не до конца понимаю, почему слой с распределенным временем ожидает все 168 часов прошлого (с 24 особенности?), а не только предсказание будущего.

1 Ответ

1 голос
/ 15 января 2020

Давайте рассмотрим X_train.shape и Y_train.shape в первом случае.

X_train.shape имеет следующую структуру: (отсчеты, время шаги, особенности) .

Учитывая (43800, 168, 6) , это означает, что:

  • 43800 наблюдений используются для обучения модели

  • В модели имеется 168 временных шагов, то есть шагов назад во времени, которые модель использует для калибровки обновлений веса.

  • В модели есть 6 функций, т.е. каждый временной шаг в модели состоит из шести функций.

Теперь, если вы задаете X_train для рассмотрения 168 временных шагов, то модель LSTM ожидает что Y_train состоит из 168 временных шагов, то есть Y_train принимает форму (временные шаги, сэмплы) .

Ваша спецификация для Y_train является ошибочной, поскольку она определяет 24 временных шагов только с выборкой 1 , тогда как модель LSTM ожидает 168 временных шагов с 24 семплов, как было указано в X_train.

Сколько бы временных шагов вы ни выбрали - они должны быть согласованы как для X_train, так и для Y_train. Надеюсь, это поможет.

...