2016-06-23 27 views
9

sto usando flow_from_directory per ottenere la formazione impostato da una cartella con la seguente struttura:Come ottenere gli ID delle etichette in Keras quando ci si allena su più classi?

train 
    class1 
    class2 
    class3 
    ... 

Il generatore è chiamato come segue:

train_generator = train_datagen.flow_from_directory( 
     train_data_dir,        
     target_size=(img_height, img_width),   
     batch_size=32,        
     class_mode='categorical') 

Non sto impostando l'argomento classes, ma mi aspettavo di ottenere le etichette in ordine alfabetico.

classes: optional list of class subdirectories (e.g. ['dogs', 'cats']). Default: None. If not provided, the list of classes will be automatically inferred (and the order of the classes, which will map to the label indices, will be alphanumeric).

Tuttavia, quando ho classificare le immagini di addestramento (per la verifica che le etichette vengono restituiti), sono non ottengo alcun ordine specifico. L'allenamento va bene (accuratezza di ~ 85%), e c'è una coerenza con le etichette di uscita quando si classificano le immagini dalla stessa classe.

Come posso dedurre i numeri di etichetta generati da flow_from_directory e associarli alle classi?

+0

Questo problema è stato fissato dal [questo pull-richiesta] (https://github.com/fchollet/keras/pull/3052). –

risposta

13

Si può vedere quale classe corrisponde alla quale numero intero guardando la variabile ImageDataGenerator.class_indices

Ecco un esempio di come usarlo

def build(source=None): 
     datagen = ImageDataGenerator(rescale=1./255) 
     data_generator = datagen.flow_from_directory(
     source, # this is the target directory 
     target_size=(150, 150), # all images will be resized to 150x150 
     batch_size=11, 
     class_mode='sparse') 
     class_dictionary = data_generator.class_indices 
    return data_generator, class_dictionary 
+0

Ottimo! Grazie!! –

+0

Ho ricevuto l'errore: l'oggetto 'ImageDataGenerator' non ha attributo 'class_indices' –

+0

può essere ovvio, ma se non si desidera che in questo caso il class_dictionary venga restituito automaticamente quando si esegue la funzione 'build()', è possibile do: 'global class_dictionary', quindi' class_dictionary = data_generator.class_indices' che ti permetterà di accedere a class_dictionary a livello globale. –

Problemi correlati