Problem with with encode input variables in Keras/Tensorflow

have a problem with my trainingtarget , trainingtarget , trainLables and testLables input variables in my model despite several posts about this subject (eg. https://github.com/rstudio/tensorflow/issues/375). I always find the Error in py_call_impl(callable, dots$args, dots$keywords) : . In my example:

#Packages
library(keras)
library(dplyr)

#Data set
RES_F<-read.csv("https://raw.githubusercontent.com/Leprechault/trash/main/cnn_ds.csv",sep=",",h=T)
str(RES_F)
#'data.frame':  11884 obs. of  5 variables:
# $ status: chr  "healthy" "attack" "healthy" "attack" ...
# $ NDVI  : num  0.459 0.311 0.565 0.529 0.434 ...
# $ SIPI  : num  0.448 0.65 0.346 0.418 0.488 ...
# $ RGI   : num  0.592 0.718 0.604 0.619 0.685 ...
# $ PRI   : num  0.6 0.631 0.629 0.586 0.641 ...

# Training using 80%
RES_train<-RES_F%>% group_by(status) %>% sample_n(1280)
RES_train<-as.data.frame(RES_train)


#Using 10% for test
rest.RES <- anti_join(RES_F, RES_train)
RES_test<-rest.RES%>% group_by(status) %>% sample_n(160)
RES_test<-as.data.frame(RES_test)

#Using 10% for validation
rest.RES2 <- anti_join(rest.RES, RES_test)
RES_val<-rest.RES2%>% group_by(status) %>% sample_n(160)
RES_val<-as.data.frame(RES_val)
training <- RES_train[,2:5] # includes all independent variables
test <- RES_test[,2:5]      # includes all independent variables

# also don't forget to identify the target variable (we can use one for training and test)
trainingtarget <- as.numeric(as.factor(RES_train[,1]))-1  # includes the dependent variable status for the training data
testtarget <- as.numeric(as.factor(RES_test[,1]))-1 
#################################### Undertake analysis ######################################
# create the categorical variables
trainLables <- keras::to_categorical(trainingtarget)
testLables <-  keras::to_categorical(testtarget)

# create the first model design
model <- keras_model_sequential()
# the keras_model_sequential consists of a linear stack of layers (in some sequential linear order)

# now we use the pipe function (%>%) to pass info from left to right, i.e., add additonal functions to 'model'
model %>%
  layer_dense(units=8, activation = 'relu', input_shape = 21) %>%     # this is for independent variables
  layer_dense(units=3, activation = 'softmax') 

########################## Configure the model for the learning process ############################
model %>% keras::compile(loss='binary_crossentrophy',
                         optimizer='adam',
                         metrics='accuracy')

# binary_crossentrophy  is used when we have categorical variables (2 options here; status)
# adam is a commonly used optimiser
# accuracy is how accurate the predicted model matches the observed result. This is the metric

history <- model%>%
  fit(training, # this is the input, the first 21 independent variables
      trainLables,
      epoch=200,
      batch=32,
      validation_split = 0.2)

# here we use the model we created to fit the training data (training)
# to fit the dependent variables (3 dummy coded), trainLabels
# and run the model 200 times.
# we use 32 batches as the number of samples we can use per gradient
# use 20% of the data for the validation split
Error in py_call_impl(callable, dots$args, dots$keywords) : 

  ValueError: in user code:

    C:\Users\fores\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\tensorflow\python\keras\engine\training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    C:\Users\fores\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:\Users\fores\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:\Users\fores\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\fores\AppData\Local\R-MINI~1\envs\R-RETI~1\lib\site-packages\tensorflow\python\keras\engine\training.py:531 train_step  **
        y_pred = self(x, trainin 
6.
stop(structure(list(message = "ValueError: in user code:\n\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\training.py:571 train_function  *\n        outputs = self.distribute_strategy.run(\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\distribute\\distribute_lib.py:951 run  **\n        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\distribute\\distribute_lib.py:2290 call_for_each_replica\n        return self._call_for_each_replica(fn, args, kwargs)\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\distribute\\distribute_lib.py:2649 _call_for_each_replica\n        return fn(*args, **kwargs)\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\training.py:531 train_step  **\n        y_pred = self(x, training=True)\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\base_layer.py:886 __call__\n        self.name)\n    C:\\Users\\fores\\AppData\\Local\\R-MINI~1\\envs\\R-RETI~1\\lib\\site-packages\\tensorflow\\python\\keras\\engine\\input_spec.py:158 assert_input_compatibility\n        ' input tensors. Inputs received: ' + str(inputs))\n\n    ValueError: Layer sequential expects 1 inputs, but it received 4 input tensors. Inputs received: [<tf.Tensor 'ExpandDims:0' shape=(32, 1) dtype=float32>, <tf.Tensor 'ExpandDims_1:0' shape=(32, 1) dtype=float32>, <tf.Tensor 'ExpandDims_2:0' shape=(32, 1) dtype=float32>, <tf.Tensor 'ExpandDims_3:0' shape=(32, 1) dtype=float32>]\n", 
    call = py_call_impl(callable, dots$args, dots$keywords), 
    cppstack = NULL), class = c("Rcpp::exception", "C++Error", 
"error", "condition"))) 
5.
(structure(function (...) 
{
    dots <- py_resolve_dots(list(...))
    result <- py_call_impl(callable, dots$args, dots$keywords) ... 
4.
do.call(object$fit, args) 
3.
fit.keras.engine.training.Model(., training, trainLables, epoch = 200, 
    batch = 32, validation_split = 0.2) 
2.
fit(., training, trainLables, epoch = 200, batch = 32, validation_split = 0.2) 
1.
model %>% fit(training, trainLables, epoch = 200, batch = 32, 
    validation_split = 0.2) 

Please, any ideas?

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.