В последнее время я играю с увеличением данных в Keras и использую базовый ImageDataGenerator. Я на собственном горьком опыте убедился, что на самом деле это генератор, а не итератор (потому что type(train_aug_ds)
дает <class 'keras.preprocessing.image.DirectoryIterator'>
Я думал, что это итератор). Я также проверил несколько блогов об его использовании, но они не отвечают на все мои вопросы.
Итак, я загрузил свои данные следующим образом:
train_aug = ImageDataGenerator(
rescale=1./255,
horizontal_flip=True,
height_shift_range=0.1,
width_shift_range=0.1,
brightness_range=(0.5,1.5),
zoom_range = [1, 1.5],
)
train_aug_ds = train_aug.flow_from_directory(
directory='./train',
target_size=image_size,
batch_size=batch_size,
)
И чтобы обучить свою модель, я сделал следующее:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
И это сработало. Я немного смущен тем, как это работает, потому что train_aug_ds
является генератором, поэтому он должен давать бесконечно большой набор данных. И в документации говорится:
При передаче бесконечно повторяющегося набора данных необходимо указать аргумент steps_per_epoch.
Чего я еще не делал, но это работает. Делает ли это каким-то образом вывод о количестве шагов? Кроме того, использует ли он только дополненные данные или также использует не дополненные изображения в пакетном режиме?
Итак, в принципе, мой вопрос заключается в том, как правильно использовать этот генератор с функцией fit
иметь все данные в моем обучающем наборе, включая оригинальные, не дополненные изображения и дополненные изображения, и просматривать их несколько раз/шагов (сейчас кажется, что он делает только один шаг за эпоху)?