web-dev-qa-db-fra.com

Keras: Comment utiliser Predict_Generator avec ImageDataGenerator?

Je suis très nouveau à Keras. J'ai formé un modèle et je voudrais prédire certaines images stockées dans des sous-dossiers (comme pour la formation). Pour les tests, je veux prédire 2 images de 7 classes (sous-dossiers). Le test_generator ci-dessous voit 14 images, mais je reçois 196 prédictions. Où est l'erreur? Merci beaucoup!

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = "false",
        class_mode='categorical')

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,nb_samples)
13
Mario Kreutzfeldt

Vous pouvez modifier la valeur de batch_size dans flow_from_directory de la valeur par défaut (qui est batch_size = 32) à batch_size = 1. Définissez ensuite les étapes de Predict_Generator sur le nombre total de vos images de test. Quelque chose comme ça:

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = nb_samples)
21
Matin

Défaut batch_size dans le générateur est 32. Si vous voulez faire 1 prédiction pour chaque échantillon de nb_samples total, vous devez diviser vos nb_samples avec le batch_size. Ainsi avec un batch_size sur 7 vous n'avez besoin que de 14/7 = 2 étapes pour vos 14 images

desired_batch_size=7

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=desired_batch_size)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = 
                                   np.ceil(nb_samples/desired_batch_size))
5
Ioannis Nasios

Le problème est l'inclusion de nb_samples dans le predict_generator qui crée 14 lots de 14 images

14*14 = 196
3
DJK