2016-06-23 28 views
6

Sto provando a prevedere le classi di immagine in keras (classificazione binaria). L'accuratezza del modello va bene, ma sembra che ImageDataGenerator mischi le immagini di input, quindi non sono stato in grado di abbinare la classe prevista con le immagini originali.keras: come prevedere le classi in ordine?

datagen = ImageDataGenerator(rescale=1./255) 

generator = datagen.flow_from_directory(
     pred_data_dir, 
     target_size=(img_width, img_height), 
     batch_size=32, 
     class_mode=None, 
     shuffle=False, 
     save_to_dir='images/aug'.format(feature)) 

print model.predict_generator(generator, nb_input) 

Per esempio, se ho a1.jpg, a2.jpg, ..., a9.jpg sotto pred_data_dir, mi aspetto di ottenere un array come

[class for a1.jpg, class for a2.jpg, ... class for a9.jpg] 

da model.predict_generator(), ma in realtà ho avuto qualcosa di simile

[class for a3.jpg, class for a8.jpg, ... class for a2.jpg] 

Come posso risolvere il problema?

+1

Non si dovrebbe cercare di prevedere su quelle immagini, utilizzare direttamente il proprio set di validazione/test. –

+1

L'obiettivo qui non è quello di ottenere il punteggio di precisione, ma quello di prevedere le etichette per il nuovo set di dati. – Yusuke

+0

Sì, quindi la domanda non ha senso, non è necessario il set di etichette di formazione per quello. –

risposta

5

Controllare il codice sorgente di flow_from_directory. Nel mio caso, ho dovuto rinominare tutte le immagini. Sono stati nominati 1.jpg .. 1000.jpg, ma per essere in ordine, hanno dovuto essere chiamati 0001.jpg .. 1000.jpg. L'ordinamento è importante qui.

flow_from_directory utilizza sorted(os.listdir(directory)), pertanto l'ordinamento non è sempre intuitivo.

0

Il metodo flow_from_directory() restituisce un oggetto con un membro filenames che elenca tutti i file. Poiché tale membro viene utilizzato per la generazione e l'iterazione batch successive, dovresti essere in grado di usarlo per abbinare i nomi dei file alle previsioni.

Per l'esempio, generator.filenames dovrebbe fornire un elenco parallelo come ['a3.jpg', 'a8.jpg', ..., 'a2.jpg'].

Problemi correlati