py_call_impl(вызываемый, точки$аргументы, точки$ключевые слова) : Ошибка значения: Мощность данных неоднозначна: в R (Keras)

#r #keras

Вопрос:

Я решил использовать модель LSTM в R для прогнозирования 2 класса(Y-факторная переменная с 2 факторами). Вот пример данных

 itog=structure(list(r = c(408L, 450L, 667L, 477L, 374L, 260L, 419L, 
441L, 658L, 374L, 333L, 313L, 404L, 432L, 458L, 457L, 286L, 286L, 
259L, 238L, 230L, 214L, 259L, 201L, 232L, 235L, 233L, 252L, 271L, 
259L, 235L, 210L, 206L, 244L, 218L, 211L, 246L, 242L, 217L, 255L, 
277L, 262L, 280L, 278L, 289L, 271L, 236L, 249L, 235L, 248L, 263L, 
217L, 263L, 300L, 242L, 269L, 280L, 301L, 317L, 247L, 218L, 209L, 
237L, 253L), g = c(384L, 418L, 656L, 480L, 397L, 341L, 441L, 
461L, 597L, 422L, 394L, 314L, 433L, 451L, 464L, 406L, 260L, 262L, 
216L, 244L, 230L, 222L, 234L, 242L, 211L, 232L, 231L, 235L, 281L, 
251L, 241L, 194L, 192L, 222L, 234L, 269L, 220L, 221L, 226L, 224L, 
210L, 274L, 272L, 281L, 247L, 264L, 226L, 247L, 254L, 223L, 255L, 
217L, 238L, 260L, 248L, 247L, 272L, 313L, 323L, 254L, 202L, 202L, 
297L, 269L), b = c(372L, 477L, 617L, 495L, 414L, 314L, 430L, 
487L, 623L, 514L, 351L, 343L, 422L, 433L, 449L, 425L, 363L, 326L, 
312L, 308L, 286L, 259L, 243L, 265L, 280L, 298L, 303L, 301L, 359L, 
298L, 295L, 265L, 263L, 298L, 275L, 332L, 303L, 287L, 305L, 285L, 
298L, 339L, 339L, 359L, 300L, 293L, 289L, 277L, 326L, 312L, 311L, 
289L, 317L, 325L, 343L, 332L, 379L, 422L, 415L, 326L, 292L, 257L, 
288L, 306L), Y = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L)), class = "data.frame", row.names = c(NA, 
-64L))
 

я так и делаю

 library(keras)
library(tensorflow)
#use_condaenv("keras-tf", required = T)
use_condaenv("r-reticulate")
use_condaenv("C:\Users\mi\AppData\Local\r-miniconda\envs\r-reticulate\python.exe")
itog=read.csv("itog.csv")
indexes = createDataPartition(itog$Y, p = .7, list = F)
train = itog[indexes, ]
test = itog[-indexes, ]

model <- keras_model_sequential()
model %>%
  layer_embedding(input_dim = 500, output_dim = 32) %>%
  layer_simple_rnn(units = 32) %>% 
  layer_dense(units = 1, activation = "sigmoid")

model %>% compile(optimizer = "rmsprop",
                  loss = "binary_crossentropy",
                  metrics = c("acc"))

history <- model %>% fit(train, test,
                         epochs = 25,
                         batch_size = 128,
                         validation_split = 0.2)
plot(history)

model %>%
  layer_embedding(input_dim = 500, output_dim = 32) %>%
  layer_simple_rnn(units = 32,return_sequences = TRUE,activation = 'relu') %>% 
  layer_simple_rnn(units = 32,return_sequences = TRUE,activation = 'relu') %>% 
  layer_simple_rnn(units = 32) %>% 
  layer_dense(units = 1, activation = "sigmoid")
 

но что-то не так, потому что произошла ошибка

 py_call_impl(callable, dots$args, dots$keywords) :
  ValueError: Data cardinality is ambiguous:
  x sizes: 431, 431, 431, 431, 431
  y sizes: 230, 230, 230, 230, 230
Make sure all arrays contain the same number of samples. 
 

Почему это произошло? И как я могу это исправить? Я, конечно, попробую выучить Кераса по Р. Я вижу , что есть какие-либо вопросы, но только в теме python, но я работаю с Р.

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

1. Привет, не могли бы вы отредактировать свой пример кода, чтобы сделать его полностью автономным, например, чтобы я мог скопировать и вставить весь код в свою консоль и получить тот же вывод . reprex.tidyverse.org может быть, это будет полезно.