Yo estoy jugando con el aumento de datos en Keras y últimamente estoy usando básica ImageDataGenerator. Aprendí de la manera difícil que es en realidad un generador, no iterator (porque type(train_aug_ds)
da <class 'keras.preprocessing.image.DirectoryIterator'>
Pensé que es un iterador). También comprobé pocos blogs sobre su uso, pero no para responder a todas mis preguntas.
Así que, me cargan mis datos como este:
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,
)
Y para entrenar a mi modelo me hicieron la siguiente:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
Y funcionó. Estoy un poco confundido cómo funciona, porque train_aug_ds
es el generador, por lo que debe dar infinitamente grande conjunto de datos. Y la documentación dice:
Al pasar un infinitamente repetida conjunto de datos, debe especificar el steps_per_epoch argumento.
Que yo no hice, sin embargo, funciona. ¿Alguna manera de inferir el número de pasos? También, el uso de sólo aumentada de datos, o también se utiliza la no-aumentada imágenes en lote?
Así que, básicamente, mi pregunta es cómo utilizar este generador correctamente con la función fit
para tener todos los datos en mi conjunto de entrenamiento, incluyendo el original, no aumentada imágenes y aumentada e imágenes, y el ciclo a través de ella varias veces/pasos (ahora parece que hace sólo un paso por la época)?