Je suis à jouer avec des renforts de données dans Keras dernièrement, et je suis l'aide de la base ImageDataGenerator. J'ai appris à la dure, il est en fait un générateur, pas d'itérateur (parce que type(train_aug_ds)
donne <class 'keras.preprocessing.image.DirectoryIterator'>
J'ai pensé que c'est un itérateur). J'ai aussi vérifié quelques blogs au sujet de l'aide, mais ils ne répondent pas à toutes mes questions.
Donc, j'ai chargé mes données comme ceci:
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,
)
Et pour former mon modèle je n'ai suivantes:
model.fit(
train_aug_ds,
epochs=150,
validation_data=(valid_aug_ds,),
)
Et cela a fonctionné. Je suis un peu confus comment il fonctionne, parce que train_aug_ds
est générateur, de sorte qu'il devrait donner de l'infiniment grand ensemble de données. Et de la documentation dit:
Lors du passage d'une infinie répétition de jeu de données, vous devez spécifier le steps_per_epoch argument.
Ce que je n'avais pas le faire, et pourtant, il fonctionne. Est-il en quelque sorte en déduire le nombre d'étapes? Aussi, faut-il utiliser uniquement augmentée de données, ou il utilise également la non-augmentée des images dans le lot?
Donc en gros, ma question est comment faire pour utiliser ce générateur correctement avec la fonction fit
pour disposer de toutes les données dans ma formation, y compris d'origine, non-augmentée des images et augmentée des images, et pour faire défiler plusieurs fois/étapes (pour l'instant il semble qu'il ne fait qu'une étape pour l'époque)?