Ошибка "Error in eval(expr, envir, enclos): ValueError: Asked to retrieve element 0, but the Sequence has length 0" при обучении модели нейронной сети
Возникает ошибка при запуске модели обучения нейронной сети для апскейла изображений из 1280x720 в 1920x1080, не могу понять ее причину. Нейросеть написана на R, используется библиотека Keras.
Ошибка:
Warning message in fit_generator(., train_generator, steps_per_epoch = 315, epochs = 20, :
“`fit_generator` is deprecated. Use `fit` instead, it now accept generators.”
Error in eval(expr, envir, enclos): ValueError: Asked to retrieve element 0, but the Sequence has length 0
Traceback:
1. model %>% fit_generator(train_generator, steps_per_epoch = 315,
. epochs = 20, validation_data = valid_generator, validation_steps = 315)
2. fit_generator(., train_generator, steps_per_epoch = 315, epochs = 20,
. validation_data = valid_generator, validation_steps = 315)
3. do.call(fit, args)
4. (function (object, ...)
. {
. UseMethod("fit")
. })(object = structure(function (object, ...)
. {
. compose_layer(object, x, ...)
. }, class = c("keras.engine.sequential.Sequential", "keras.engine.functional.Functional",
. "keras.engine.training.Model", "keras.engine.base_layer.Layer",
. "tensorflow.python.module.module.Module", "tensorflow.python.trackable.autotrackable.AutoTrackable",
. "tensorflow.python.trackable.base.Trackable", "keras.utils.version_utils.LayerVersionSelector",
. "keras.utils.version_utils.ModelVersionSelector", "python.builtin.object"
. ), py_object = <environment>), x = <environment>, steps_per_epoch = 315,
. epochs = 20, verbose = 1, callbacks = NULL, validation_data = <environment>,
. validation_steps = 315, class_weight = NULL, max_queue_size = 10,
. workers = 1, initial_epoch = 0)
5. fit.keras.engine.training.Model(object = structure(function (object,
. ...)
. {
. compose_layer(object, x, ...)
. }, class = c("keras.engine.sequential.Sequential", "keras.engine.functional.Functional",
. "keras.engine.training.Model", "keras.engine.base_layer.Layer",
. "tensorflow.python.module.module.Module", "tensorflow.python.trackable.autotrackable.AutoTrackable",
. "tensorflow.python.trackable.base.Trackable", "keras.utils.version_utils.LayerVersionSelector",
. "keras.utils.version_utils.ModelVersionSelector", "python.builtin.object"
. ), py_object = <environment>), x = <environment>, steps_per_epoch = 315,
. epochs = 20, verbose = 1, callbacks = NULL, validation_data = <environment>,
. validation_steps = 315, class_weight = NULL, max_queue_size = 10,
. workers = 1, initial_epoch = 0)
6. do.call(object$fit, args)
7. (structure(function (...)
. {
. dots <- py_resolve_dots(list(...))
. result <- py_call_impl(callable, dots$args, dots$keywords)
. if (convert)
. result <- py_to_r(result)
. if (is.null(result))
. invisible(result)
. else result
. }, class = c("python.builtin.method", "python.builtin.object"
. ), py_object = <environment>))(batch_size = NULL, epochs = 20L,
. verbose = 1L, validation_split = 0, shuffle = TRUE, class_weight = NULL,
. sample_weight = NULL, initial_epoch = 0L, x = <environment>,
. validation_data = <environment>, steps_per_epoch = 315L,
. validation_steps = 315L, callbacks = list(<environment>))
8. py_call_impl(callable, dots$args, dots$keywords)
Код:
# загрузка библиотеки для машинного обучения Keras
install.packages("keras")
library(keras)
# Определение модели
model <- keras_model_sequential()
# Добавление слоев
model %>%
layer_conv_2d(filters = 64, kernel_size = c(3, 3), padding = "same", activation = "relu", input_shape = c(720, 1280, 3)) %>%
layer_upsampling_2d(size = c(2, 2)) %>%
layer_conv_2d(filters = 64, kernel_size = c(3, 3), padding = "same", activation = "relu") %>%
layer_upsampling_2d(size = c(2, 2)) %>%
layer_conv_2d(filters = 32, kernel_size = c(3, 3), padding = "same", activation = "relu") %>%
layer_upsampling_2d(size = c(2, 2)) %>%
layer_conv_2d(filters = 16, kernel_size = c(3, 3), padding = "same", activation = "relu") %>%
layer_upsampling_2d(size = c(2, 2)) %>%
layer_conv_2d(filters = 3, kernel_size = c(3, 3), padding = "same", activation = "relu")
# Компиляция модели
model %>% compile(
loss = "mean_squared_error",
optimizer = optimizer_adam(lr = 0.0005),
metrics = c("mean_absolute_error")
)
# Загрузка данных
train_data_gen <- image_data_generator(rescale = 1/255)
train_generator <- flow_images_from_directory(
"/content/data/dataset_images_hd",
target_size = c(1280, 720),
class_mode = NULL,
batch_size = 32
)
valid_data_gen <- image_data_generator(rescale = 1/255)
valid_generator <- flow_images_from_directory(
"/content/data/dataset_images_fullhd",
target_size = c(1920, 1080),
class_mode = NULL,
batch_size = 32
)
# Обучение модели
history <- model %>% fit_generator(
train_generator,
steps_per_epoch = 315,
epochs = 20,
validation_data = valid_generator,
validation_steps = 315
)