Keras: низкая производительность с ImageDataGenerator
Я пытаюсь увеличить данные моего изображения, используя Keras ImageDataGenerator
, Моя задача - это регрессионная задача, в которой входное изображение приводит к другому преобразованному изображению. Пока все хорошо, работает довольно хорошо.
Здесь я хотел применить увеличение данных с помощью ImageDataGenerator
, Чтобы преобразовать оба изображения одинаково, я использовал подход, описанный в документации Keras, где описано преобразование изображения с соответствующей маской. Мой случай немного отличается, так как мои изображения уже загружены и их не нужно извлекать из каталога. Эта процедура уже была описана в другом посте StackOverlow.
Чтобы проверить мою реализацию, я сначала использовал ее без дополнения и использования ImageDataGenerator
без указания какого-либо параметра. Согласно справочному классу в документах Keras, это не должно изменять изображения. Смотрите этот фрагмент:
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
в функции потока (данные уже перетасованы)
Ни один из этих подходов не помог улучшить результаты.
1 ответ
Наконец, я понимаю, что вы пытаетесь сделать, это должно сделать работу.
aug = ImageDataGenerator(**data_gen_args)
# train the network
H = model.fit_generator(aug.flow(img_train, target_train, batch_size=image_train.shape[0]),
validation_data=(img_val, target_val), steps_per_epoch=image_train.shape[0] // BS,
epochs=EPOCHS)
Дайте мне знать, если это работает.