R で株価を予測するための Siraj のコードを複製しようとしています ( https://github.com/llSourcell/How-to-Predict-Stock-Prices-Easily-Demo )。
これは私のコードです:
url <- "https://raw.githubusercontent.com/llSourcell/How-to-Predict-Stock-Prices-Easily-Demo/master/sp500.csv"
sp500 <- read.csv(url, header = FALSE, stringsAsFactors = FALSE)
colnames(sp500) <- "closingPrice"
# choose sequence length
seq_length <- 50
sequence_length <- seq_length + 1
result <- list()
for (i in 1:(nrow(sp500) - seq_length)){
result[[i]] <- sp500[i : (i + seq_length),1]
}
# normalised data
normalised_data <- list()
for (i in 1:length(result)){
normalised_window <- ((result[[i]] / result[[i]][[1]]) - 1)
normalised_data[[i]] <- normalised_window
}
result <- normalised_data
# test <- do.call(rbind, result)
# define train and test datasets
row <- round(0.9 * length(result))
train <- result[1:as.integer(row)]
# train <- sample(train)
x_train <- lapply(train, '[', -length(train[[1]]))
y_train <- lapply(train, '[', length(train[[1]]))
test = result[(as.integer(row)+1):length(result)]
x_test <- lapply(test, '[', -length(test[[1]]))
y_test <- lapply(test, '[', length(test[[1]]))
x_train <- array(x_train, dim = c(3709, 51, 1))
x_test <- array(x_test, dim = c(412, 51, 1))
#########################
# Step 2: Build a model #
#########################
library(keras)
model <- keras_model_sequential()
model %>% layer_lstm(units = 51L, return_sequences = TRUE, input_shape = c(NULL, 1L))
最後の行はエラーを返します:
Error in py_call_impl(callable, dots$args, dots$keywords) :
ValueError: Input 0 is incompatible with layer lstm_5: expected ndim=3, found ndim=2
元のコードでは、Siraj はinput_dim
およびoutput_dim
LSTM レイヤーへの引数を使用しますがlayer_lstm()
、R の関数にはこの引数が含まれていません。Keras 2 では減価償却されており、units
andを使用する必要があることがわかりましたが、、 ...input_shape
を試しましたが、機能しません。input_shape = c(1L)
input_shape = c(NULL, 1L)
input_shape = c("None", 1L)