R Керас: Ошибка в регрессии базового урока. Ошибка в py_call_impl(вызывается, точки$args, точки$ключевые слова) : Ошибка значения: в коде пользователя:

#r #tensorflow #keras

Вопрос:

Я следил за несколькими учебниками по тензорному потоку, которые не работают.

https://www.amestosolutions.no/blogg/using-keras-in-r—simpler-than-ever/
https://www.datacamp.com/community/tutorials/keras-r-deep-learning

Вот пример кода, который очень похож на то, что описано в учебниках.

 x <-rnorm(1000) #input variables
y <- rnorm(1000)    #input variables
z <-x y rnorm(1000) #output variable
df <-data.frame(x=x,y=y,z=z)

model <- keras_model_sequential() %>%
layer_dense(units = 8,activation = "relu",input_shape = 2) %>%
layer_dense(units = 8,activation = "relu") %>%
layer_dense(units = 1,activation = "relu") 

model %>% compile(
loss = "mse",
  optimizer = optimizer_adam(),
metrics = list("mean_absolute_error"))

model %>% fit(df[,1:2],df[,3], epochs = 20)
 

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

 Error in py_call_impl(callable, dots$args, dots$keywords) : 
  ValueError: in user code:

    C:UsersUserAppDataLocalR-MINI~1envsR-RETI~1libsite-packageskerasenginetraining.py:853 train_function  *
        return step_function(self, iterator)
    C:UsersUserAppDataLocalR-MINI~1envsR-RETI~1libsite-packageskerasenginetraining.py:842 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    C:UsersUserAppDataLocalR-MINI~1envsR-RETI~1libsite-packagestensorflowpythondistributedistribute_lib.py:1286 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:UsersUserAppDataLocalR-MINI~1envsR-RETI~1libsite-packagestensorflowpythondistributedistribute_lib.py:2849 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:UsersUserAppDataLocalR-MINI~1envsR-RETI~1libsite-packagestensorflowpythondistributedistribute_lib.py:3632 _call_for_each_replica
        return fn(*args, **kwargs)
 

Я использую tensorflow 2.6

Что в этом коде может вызвать у меня эту ошибку и как бы я ее исправил?

Ответ №1:

Вероятно, вы хотите передать массив fit() методу для входных обучающих данных, прямо сейчас вы передаете данные.фрейм. Преобразование df в массив matrix/R в вашем примере заставляет все работать:

 library(keras)
x <- rnorm(1000) #input variables
y <- rnorm(1000)    #input variables
z <- x   y   rnorm(1000) #output variable
mat <- cbind(x, y, z)

model <- keras_model_sequential(input_shape = 2) %>%
  layer_dense(8, activation = "relu") %>%
  layer_dense(8, activation = "relu") %>%
  layer_dense(1, activation = "relu")
#> Loaded Tensorflow version 2.6.0

model %>% compile(
  loss = "mse",
  optimizer = optimizer_adam(),
  metrics = list("mean_absolute_error")
)

model %>% fit(mat[, 1:2], mat[, 3])
 

Создано 2021-10-05 пакетом reprex (v2.0.1)

Комментарии:

1. Поэтому измените данные.фрейм в матрицу. Я думал, что уже пробовал это, наверное, нет. Неловко.