Io sto giocando con aumento di dati in Keras ultimamente e sto utilizzando di base ImageDataGenerator. Ho imparato nel modo più duro è in realtà un generatore, non iteratore (perché type(train_aug_ds)
dà <class 'keras.preprocessing.image.DirectoryIterator'>
Ho pensato che è un iteratore). Ho anche controllato qualche blog sul suo utilizzo, ma non rispondono a tutte le mie domande.
Così, ho caricato i miei dati come questo:
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,
)
E per addestrare il mio modello ho fatto la seguente:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
E ha funzionato. Io sono un po ' confuso come funziona, perché train_aug_ds
è un generatore, e quindi dovrebbe dare infinitamente grandi set di dati. E la documentazione dice:
Durante il passaggio di un infinitamente ripetuta set di dati, è necessario specificare il steps_per_epoch argomento.
Che non ho fatto, ma funziona. Ha qualche dedurre il numero di passi? Anche se si utilizza solo aumentata dati, oppure anche in usa non aumentata immagini in batch?
Quindi, fondamentalmente, la mia domanda è: come utilizzare questo generatore correttamente con funzione fit
per avere tutti i dati del training set, tra cui le originali, non aumentata immagini e aumentata immagini, e per scorrere più volte/passaggi (per adesso sembra solo un passo per ogni epoca)?