R и Keras - проблема при подборе модели с пользовательской метрикой R2 - PullRequest
0 голосов
/ 18 марта 2020

Мне нужно использовать коэффициент определения 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. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...