Я пытаюсь увеличить данные моего изображения, используя Keras ImageDataGenerator
. Моя задача - это регрессионная задача, в которой входное изображение приводит к другому преобразованному изображению. Пока все хорошо, работает довольно хорошо.
Здесь я хотел применить увеличение данных с помощью ImageDataGenerator
. Чтобы преобразовать оба изображения одинаково, я использовал подход, описанный в Keras docs , где описано преобразование изображения с соответствующей маской. Мой случай немного отличается, так как мои изображения уже загружены и их не нужно извлекать из каталога. Эта процедура уже была описана в другом посте StackOverlow .
Чтобы проверить мою реализацию, я сначала использовал ее без дополнения и использовал ImageDataGenerator
без указания какого-либо параметра. Согласно справочному классу в Keras docs , это не должно изменять изображения. Посмотреть этот фрагмент:
img_val = img[0:split_seperator]
img_train = img[split_seperator:]
target_val = target[0:split_seperator]
target_train = target[split_seperator:]
data_gen_args = dict()
# define data preparation
src_datagen = ImageDataGenerator(**data_gen_args)
target_datagen = ImageDataGenerator(**data_gen_args)
# fit parameters from data
seed = 1
src_datagen.fit(img_train, augment=False, seed=seed)
target_datagen.fit(target_train, augment=False, seed=seed)
training_generator = zip(
src_datagen.flow(img_train, batch_size=batch_size_training, seed=seed),
target_datagen.flow(target_train, batch_size=batch_size_training, seed=seed))
_ = model.fit_generator(
generator=training_generator,
steps_per_epoch=image_train.shape[0] // batch_size_training,
epochs=num_epochs, verbose=1,
validation_data=(img_val, target_val), callbacks=callbacks)
К сожалению, у моей реализации, похоже, есть некоторые проблемы. Я не получаю ожидаемых выступлений. Потеря проверки как-то стабильна около определенного значения и лишь немного уменьшается (см. Изображение ниже). Здесь я ожидаю, так как я не использовал никакого дополнения, такую же потерю, как и без расширенного базового уровня.
Для сравнения, моя тренировка без ImageDataGenerator
выглядит как
_ = model.fit(img, target,
batch_size=batch_size_training,
epochs=num_epochs, verbose=1,
validation_split=0.2, callbacks=cb)
Полагаю, я как-то перепутал использование функций ImageDataGenerator
, flow
и fit
. Итак, мои вопросы:
- является одной из примененных функций
fit
или flow
избыточной и вызывает такое поведение?
- есть ли у меня проблема с реализацией?
- имеет ли эта реализация вообще смысл?
- имеет ли смысл устанавливать исправление набора проверки или его тоже нужно расширять?
Обновление (2019-01-23 и продолжение):
Что я уже пробовал до сих пор (в ответах на ответы):
- создание генератора и для данных проверки
- удаление примененной функции подгонки
- настройка
shuffle=True
в функции потока (данные уже перетасованы)
Ни один из этих подходов не помог улучшить результаты.