2016-06-23 2 views
9

Ich verwende flow_from_directory die Ausbildung aus einem Ordner mit der folgenden Struktur gesetzt zu bekommen:Wie bekomme ich Etiketten-IDs in Keras, wenn ich an mehreren Kursen trainiere?

train 
    class1 
    class2 
    class3 
    ... 

Der Generator genannt wird, wie folgt:

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

ich Einstellung bin nicht das Argument classes, aber ich hatte erwartet, die Etiketten in alphabetischer Reihenfolge zu bekommen.

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).

Wenn ich jedoch die Trainingsbilder klassifiziere (um zu überprüfen, welche Etiketten zurückgegeben werden), bekomme ich keine spezielle Bestellung. Das Training läuft gut (Genauigkeit von ~ 85%), und bei der Klassifizierung von Bildern aus derselben Klasse besteht eine Übereinstimmung mit den Ausgabe-Etiketten.

Wie kann ich die von flow_from_directory generierten Label-Nummern ableiten und sie den Klassen zuordnen?

+0

Dieses Problem wurde behoben, indem [diese Pull-Anfrage] (https://github.com/fchollet/keras/pull/3052). –

Antwort

13

können Sie sehen, welche Klasse entsprechen, die bei der variablen ImageDataGenerator.class_indices

Hier ganze Zahl suchen, ist ein Beispiel dafür, wie es zu benutzen

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

Großartig! Vielen Dank!! –

+0

Ich bekomme den Fehler: 'ImageDataGenerator' Objekt hat kein Attribut 'class_indices' –

+0

es kann selbstverständlich sein, aber wenn Sie nicht möchten, dass das class_dictionary in diesem Fall automatisch beim Ausführen der 'build()' Funktion zurückgegeben wird, können Sie do: 'global class_dictionary', dann' class_dictionary = data_generator.class_indices', mit dem Sie global auf class_dictionary zugreifen können. –

Verwandte Themen