Ошибка Keras (R) при выполнении генератора подгонки - PullRequest
0 голосов
/ 09 мая 2018

У меня ошибка при использовании fit_generator в R ... вот мой код ..` ​​

model <- keras_model_sequential()

model %>%
  layer_conv_2d(32, c(3,3), input_shape = c(64, 64, 3)) %>%
  layer_activation("relu") %>%
  layer_max_pooling_2d(pool_size = c(2,2)) %>%
  layer_conv_2d(32, c(3, 3)) %>%
  layer_activation("relu") %>%
  layer_max_pooling_2d(pool_size = c(2, 2)) %>%
  layer_flatten() %>%
  layer_dense(128) %>%
  layer_activation("relu") %>%
  layer_dense(128) %>%
  layer_activation("relu") %>%
  layer_dense(2) %>%
  layer_activation("softmax")

opt <- optimizer_adam(lr = 0.001, decay = 1e-6)

model %>%
  compile(loss = "categorical_crossentropy", optimizer = opt, metrics = "accuracy")

train_gen <- image_data_generator(rescale = 1./255,
                                  shear_range = 0.2,
                                  zoom_range = 0.2,
                                  horizontal_flip = T)

test_gen <- image_data_generator(rescale = 1./255)

train_set = train_gen$flow_from_directory('dataset/training_set',
                                          target_size = c(64, 64),
                                          class_mode = "categorical")

test_set = test_gen$flow_from_directory('dataset/test_set',
                                        target_size = c(64, 64),
                                        batch_size = 32,
                                        class_mode = 'categorical')

model$fit_generator(train_set,
                    steps_per_epoch = 50,
                    epochs = 10)

Ошибка: Ошибка в py_call_impl (вызываемый, точки $ args, точки $ ключевые слова): StopIteration: объект 'float' не может быть интерпретирован как целое число

Если я поставлю проверочный набор, у него тоже будет другая ошибка BOOL (validation_data). Ошибка с плавающей точкой ..

1 Ответ

0 голосов
/ 10 мая 2018

Сложно помочь без минимального воспроизводимого примера.

Я предполагаю, что вы получаете эту ошибку, когда пытаетесь запустить

train_set = train_gen$flow_from_directory('dataset/training_set',
                                          target_size = c(64, 64),
                                          class_mode = "categorical")

Здесь вы сами вызываете функцию python, используя reticulate, а не keras (пакет R). Это может сработать, но вы должны быть более точными в отношении типа и использовать target_size = as.integer(c(64, 64)), так как python ожидает целое число.

В качестве альтернативы, я бы предложил рассмотреть функцию flow_images_from_directory(), включенную в пакет keras.


То же самое относится и к

model$fit_generator(train_set,
                    steps_per_epoch = 50,
                    epochs = 10)

Я бы посоветовал заглянуть в

model %>% 
  fit_generator()

вместо этого, который является частью пакета keras.

...