Прогнозирование долгосрочных прогнозов с использованием многомерного ГРУ (Keras, R)

Я пытаюсь построить прогнозирование временных рядов на основе глубокого обучения с использованием ГРУ. Мне удалось получить единый прогноз. Для справки, если кто-то захочет повторить мой процесс, вот мои данные - https://drive.google.com/file/d/1nTQjkMuYFVaYFP4mTtjTZkEXCLwjmGip/view?usp=sharing

Вот как выглядят мои данные. Я пытаюсь спрогнозировать функцию Total.Sum -

str(df)

'data.frame':   268 obs. of  5 variables:
 $ Total.Sum: num  0.0159 0.0233 0.0234 0.024 0.0157 ...
 $ weekday  : num  0.25 0.5 0.75 1 0 0.25 0.5 0.75 1 0 ...
 $ holiday  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ date     : num  0.978 0.978 0.978 0.978 0.978 ...
 $ month    : num  0.0201 0.0201 0.0201 0.0201 0.0201 ...

У меня есть 256 обучающих примеров. Предварительная обработка данных для модели -

# Splitting into training and testing set
df <- as.matrix(df)
x_train <- array_reshape(df[1:256,], dim = c(256,5,1)) # shifting testing set by 1 timestep
y_train <- df[,1] # first column is our target variable
y_train <- array_reshape(df, dim = c(256, 1)) 

А вот и моя модель ГРУ -

model <- keras_model_sequential()
model %>% 
  layer_gru(units = 32, batch_input_shape = c(256, 5, 1), return_sequences = T, stateful = T, activation = "relu") %>%
  layer_gru(units = 64, return_sequences = T, stateful = T, activation = "relu") %>%
  layer_gru(units = 128, return_sequences = T, stateful = T, activation = "relu") %>%
  layer_gru(units = 32, return_sequences = F, stateful = T, activation = "relu") %>%
  layer_dense(units = 1) %>%
  layer_activation(activation = "linear")

model %>% compile(loss = "mse", optimizer = "adam")

Наконец, вот мой тренировочный цикл -

for (i in 1:1000) {
  model %>% fit(x_train, y_train, batch_size = 256, shuffle = FALSE, epochs = 1)
  model %>% reset_states()
}

У меня вопрос, как я могу использовать прогнозы модели, чтобы получить более долгосрочный прогноз? Я пытался понять, как это было достигнуто с этого поста - Понимание LSTM Keras, но мне было трудно это понять, особенно когда я пытаюсь перевести с python на R. Из того, что я понимаю, нам нужно предсказать следующий шаг в Y и каким-то образом вернем это в нашу модель...

Вот как далеко я продвинулся -

X <- x_train[-dim(totalSequences)[1],,] #the entire known sequence, except the last step
X <- array_reshape(X, dim = c(255, 5, 1))

Y <- x_train[dim(x_train)[1],,] #one step ahead of X
Y <- array_reshape(Y, dim = c(1, 5))

#loop for resetting states at the start/end of the sequences:
for (i in 1:60){
  model %>% reset_states()
  model %>% fit(X, Y, batch_size = 256, shuffle = FALSE, epochs = 10)
}

Это - то, где я сталкиваюсь с ошибкой несоответствия формы, которую я, кажется, не могу устранить. Любая помощь очень ценится!

Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: Error when checking target: expected activation_14 to have shape (1,) but got array with shape (5,)

0 ответов

Другие вопросы по тегам