J'utilise le générateur suivant:
datagen = ImageDataGenerator( fill_mode='nearest', cval=0, rescale=1. / 255, rotation_range=90, width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.5, horizontal_flip=True, vertical_flip=True, validation_split = 0.5, ) train_generator = datagen.flow_from_dataframe( dataframe=traindf, directory=train_path, x_col="id", y_col=classes, subset="training", batch_size=8, seed=123, shuffle=True, class_mode="other", target_size=(64,64)) STEP_SIZE_TRAIN = train_generator.n // train_generator.batch_size valid_generator = datagen.flow_from_dataframe( dataframe=traindf, directory=train_path, x_col="id", y_col=classes, subset="validation", batch_size=8, seed=123, shuffle=True, class_mode="raw", target_size=(64, 64)) STEP_SIZE_VALID = valid_generator.n // valid_generator.batch_size
Maintenant, le problème est que les données de validation sont également augmentées, ce que je suppose que vous ne voudriez pas faire pendant l'entraînement. Comment éviter cela? Je n'ai pas deux répertoires pour la formation et la validation. Je souhaite utiliser une seule trame de données pour former le réseau. Aucune suggestion?
3 Réponses :
Vous pouvez résoudre ce problème en modifiant légèrement votre code. Vous pouvez ajouter un autre objet ImageDataGenerator nommé test_datagen, dans lequel vous ne passerez que le paramètre rescale et aucune technique d'augmentation. Ainsi, les techniques d'augmentation seront dans un objet différent, pour vous son datagen. Vous devez également diviser votre répertoire de formation et de test avant de le passer pour former et tester les générateurs de données. Je vous donne un exemple de code à partir tensorflow, vous pouvez également consulter ce .
#For traning data train_datagen = ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) #For testing data test_datagen = ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( 'data/train', target_size=(150, 150), batch_size=32, class_mode='binary') validation_generator = test_datagen.flow_from_directory( 'data/validation', target_size=(150, 150), batch_size=32, class_mode='binary') model.fit_generator( train_generator, steps_per_epoch=2000, epochs=50, validation_data=validation_generator, validation_steps=800)
Je ne peux pas utiliser le flux depuis le répertoire ... J'ai un dataframe :(
La solution que mon ami a trouvée consistait à utiliser un générateur différent mais avec le même partage de validation et aucun mélange.
train_generator = datagen.flow_from_dataframe( dataframe=traindf, directory=train_path, x_col="id", y_col=classes, subset="training", batch_size=64, seed=123, shuffle=False, class_mode="raw", target_size=(224,224)) STEP_SIZE_TRAIN = train_generator.n // train_generator.batch_size valid_generator = valid_datagen.flow_from_dataframe( dataframe=traindf, directory=train_path, x_col="id", y_col=classes, subset="validation", batch_size=64, seed=123, shuffle=False, class_mode="raw", target_size=(224, 224)) STEP_SIZE_VALID = valid_generator.n // valid_generator.batch_size
puis vous pouvez définir les deux générateurs comme
datagen = ImageDataGenerator( #featurewise_center=True, #featurewise_std_normalization=True, rescale=1. / 255, rotation_range=90, width_shift_range=0.1, height_shift_range=0.1, zoom_range=0.5, horizontal_flip=True, vertical_flip=True, validation_split = 0.15, ) valid_datagen=ImageDataGenerator(rescale=1./255,validation_split=0.15)
Vous devriez voir la réponse à cette question connexe: Lors de l'utilisation de l'augmentation des données, est-il possible de valider uniquement avec les images d'origine?
Il dit d'utiliser ImageDataGenerator avec des paramètres vides lors du chargement des données de validation , tels que:
train_gen = ImageDataGenerator(aug_params).flow_from_directory(train_dir) valid_gen = ImageDataGenerator().flow_from_directory(valid_dir) model.fit_generator(train_gen, validation_data=valid_gen)
Vous pouvez voir les réponses à une question connexe sur ce lien: Lors de l'utilisation de l'augmentation des données, est-il permis de valider uniquement avec les images originales?
Vous pouvez voir les réponses à une question connexe sur ce lien: Lors de l'utilisation de l'augmentation des données, est-il permis de valider uniquement avec les images originales?