Мне нужно использовать коэффициент определения R2, чтобы оценить производительность моей модели на тренировочном наборе. Этот показатель c не включен в значения по умолчанию в Керасе, поэтому я должен определить пользовательский показатель c, указанный в
https://keras.rstudio.com/reference/metric_binary_accuracy.html
Ниже я покажу вам свою попытку:
library(Metrics)
library(keras)
library(dplyr)
# Calculate mean and standard deviation for scale
mean <- apply(train, 2, mean)
std <- apply(train, 2, sd)
# Scale and split the data
train_data <- data.frame(scale(train, center = mean, scale = std))
train_data.x <- as.matrix(select(train_data, -c("AvailableBikes")))
train_data.y <- as.matrix(select(train_data, c("AvailableBikes")))
test_data <- data.frame(scale(test, center = mean, scale = std))
test_data.x <- as.matrix(select(test_data, -c("AvailableBikes")))
test_data.y <- as.matrix(select(test_data, c("AvailableBikes")))
# Define R2 custum metric
r2_metric <- custom_metric("R-squared", function(y_true, y_pred){
SS_res = k_sum(k_square(y_true - y_pred))
SS_tot = k_sum(k_square(y_true - k_mean(y_true)))
R2 <- (1- SS_res/(SS_tot + k_epsilon()))
return(R2)
})
# Define a function for build the model
build_model <- function() {
model <- keras_model_sequential() %>%
layer_dense(units = 64, activation = "relu", input_shape = dim(train_data)[[2]]-1) %>%
layer_dense(units = 1)
model %>% compile(
optimizer = "rmsprop",
loss = "mse",
metrics = c(r2_metric)
)
}
num_epochs <- 10
# Train on entire dataset
set.seed(3)
model <- build_model()
model %>% fit(train_data.x, train_data.y, epochs = num_epochs, batch_size = 32, verbose = 1)
Проблема возникает, когда я тренирую модель:
model %>% fit(train_data.x, train_data.y, epochs = num_epochs, batch_size = 32, verbose = 1)
Коэффициент детерминации правильно рассчитывается и обновляется до конца первой эпохи. Затем обучение прекращает возвращать следующую ошибку:
Epoch 1/10
19232/20260 [===========================>..] - ETA: 0s - loss: 0.7825 - R-squared: 0.1788
Error in py_call_impl(callable, dots$args, dots$keywords) :
RuntimeError: Evaluation error: names do not match previous names.
Каково происхождение этой ошибки? Любой совет, чтобы решить это? Я использую Keras с R. Заранее спасибо.