Построение LSTM для прогнозирования запасов - PullRequest
1 голос
/ 12 апреля 2019

Я строю свою первую модель LSTM с использованием keras из R. Я считаю, что моя проблема связана с моей input_shape, и я был бы признателен за вашу помощь.

Я использую итоговую доходность акций в момент времени t, чтобы прогнозировать доходность в момент времени t + 1. поэтому я считаю, что моя форма ввода должна быть равна 1.

Вот мой код:

#LSTM Model 
model <- keras::keras_model_sequential() %>% 
  layer_lstm(units = 50, return_sequences = TRUE, dropout = 0.2, weights = 0.01, input_shape = 1
             )%>% 
  layer_lstm(units = 100, return_sequences = FALSE, dropout = 0.2, weights = 0.01
            )%>%
  layer_dense(units = 1, activation = 'linear')

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

Однако, когда я запускаю это, я получаю следующее сообщение об ошибке:

error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: Input 0 is incompatible with layer lstm_12: expected ndim=3, found ndim=2

Есть идеи о том, что я делаю неправильно, и предложения о том, что я должен делать?

Спасибо за ваше время.

Я полагаю, что предоставленной мной информации должно быть достаточно, чтобы ответить на мой вопрос. Если нет, то вот мой полный код для получения данных и результатов

#Downloading Stock Price and normalize to returns    
BRI_Price <-quantmod::getSymbols("BBRI.JK", src = "yahoo", from = as.Date("2015-01-01"), to = as.Date("2017-02-17"), by = "day", auto.assign = FALSE) 
Returns_Closing <-quantmod::dailyReturn(BRI_Price$BBRI.JK.Close) 

#Training and Testing Data 
train_size <- round(.9*nrow(Returns_Closing)) 
test_size <- nrow(Returns_Closing) - train_size 
train <- Returns_Closing[0:train_size,] 
test <- Returns_Closing[train_size:nrow(Returns_Closing),] 

#Reshape into X=t and Y=t+1 
x_train <- Returns_Closing[1:train_size,] 
y_train <- Returns_Closing[2:train_size+1] 
x_test <- Returns_Closing[train_size:nrow(Returns_Closing),] 
y_test <- Returns_Closing[468:nrow(Returns_Closing),] 

#LSTM Model 
model <- keras::keras_model_sequential() %>% 
layer_lstm(units = 50, return_sequences = TRUE, dropout = 0.2, weights = 0.01, input_shape = 1 )%>% 
layer_lstm(units = 100, return_sequences = FALSE, dropout = 0.2, weights = 0.01 )%>% 
layer_dense(units = 1, activation = 'linear') 

model %>% 
compile( optimizer = optimizer_rmsprop(), loss = "mse" ) 
#train the model 
Train_Model <- model %>% fit( x = x_train, batch_size = 100, epochs = 1, validation_data = list(x_test, y_test) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...