Это мой первый пост в stackoverflow, на который, наверное, очень легко ответить. Однако из-за отсутствия руководств, касающихся этой конкретной проблемы c в R, я думаю, что это может быть отличным справочником для пользователей R, пытающихся реализовать смешанные данные, включая изображения.
В частности, моя задача состоит в том, чтобы соответствовать модель глубокого обучения с несколькими входами, включая данные изображения в R для задачи регрессии. Я использую tfdatasets для создания PrefetchDataset из текстового файла, содержащего пути к изображениям и другие данные (конвейер предварительной обработки похож на этот (https://blogs.rstudio.com/ai/posts/2019-08-23-unet/), за исключением того, что имеет только одну переменную изображения), который выглядит следующим образом :
training_dataset ('validation_dataset' выглядит аналогично)
Первый тензор - это данные изображения (размер пакета, ширина, высота, каналы), за которыми следуют дополнительные числовые данные (размер пакета, два столбца) и, наконец, цели (размер пакета, один столбец) . Я убедился, что входные слои принимают именно эти размеры, и компиляция модели работает нормально. Вот фрагмент кода для создания экземпляра модели:
model <- keras_model(
inputs = c(input_cnn, input_dense),
outputs = c(main_output)
)
По сути, мой вопрос о том, как передать набор данных в функцию соответствия. Моя прежняя задача заключалась в использовании только данных изображения, и я пошел с этим:
history <- model %>% fit(x = training_dataset,
epochs = 100,
steps_per_epoch = dataset_size/batch_size,
validation_data = validation_dataset)
Очевидно, аргумент y в fit () указывать не нужно. С новым набором данных я получаю различные ошибки, в основном следующие:
Ошибка в py_call_impl (вызываемый, точки $ args, точки $ ключевые слова): AssertionError: в коде пользователя: ...
До сих пор я пробовал использовать три отдельных набора PrefetchDatasets (изображения, дополнительная информация, цели) и подогнать их как fit(x = list(training_dataset_images, training_dataset_additional), y = training_dataset_targets...)
, но ничего подобного не сработало. Кроме того, я думаю, что должен быть элегантный способ сделать это.
Программное обеспечение: Keras 2.3.0.0, tfdatasets 2.0.0, tensorflow 2.2.0, R 3.6.3.
Подсказки на проблема и как улучшить мой пост приветствуются: -)
EDIT
Я просто хочу упомянуть, что я думаю, что нашел решение или, по крайней мере, обходной путь это подходит для меня. Я поделюсь им здесь, потому что это может помочь другим. Я вставил функцию dataset_prepare
во входной конвейер tfdatasets, чтобы результирующий набор данных выглядел так:
Затем я использовал следующий код, чтобы нарисовать пакет из набора данных (то же самое для проверочных и тестовых наборов данных), который я могу перебирать:
iter_train <- make_iterator_one_shot(training_dataset)
next_batch_train <- iterator_get_next(iter_train)
Таким образом, я смог вызвать, например, учебные цели пакета, используя next_batch_train$y
.
Наконец, я использовал train_on_batch
для обучения и test_on_batch
для проверки и тестирования с простым for-l oop прохождение всех пакетов для каждой эпохи, пока набор данных не станет пустым. Для следующей эпохи я снова использовал make_iterator_one_shot
и так далее. В итоге я сам написал примитивную версию частей функции Keras fit
, чтобы иметь представление о показателях во время обучения и проверки.
Приветствуются более простые решения: -)