Ich habe ein funktionelles Modell in Keras (Resnet50 aus Repo-Beispielen). Ich trainierte es mit ImageDataGenerator
und flow_from_directory
Daten und speicherte Modell zu .h5
Datei. Wenn ich model.predict
rufe, bekomme ich eine Reihe von Klassenwahrscheinlichkeiten. Aber ich möchte sie mit Klassenbezeichnungen assoziieren (in meinem Fall - Ordnernamen). Wie kann ich sie bekommen? Ich fand, dass ich model.predict_classes
und model.predict_proba
verwenden konnte, aber ich habe diese Funktionen im Funktionsmodell nicht, nur im Sequential.Klassenbezeichnungen erhalten von Keras Funktionsmodell
Antwort
UPDATE: Dies gilt nicht für neuere Keras-Versionen. Bitte benutzen Sie argmax()
wie in der Antwort von Emilia Apostolova.
Die funktionalen API-Modelle haben nur die predict()
-Funktion, die für die Klassifizierung die Klassenwahrscheinlichkeiten zurückgeben würde. Sie können dann die wahrscheinlichsten Klassen mit der Dienstprogrammfunktion probas_to_classes()
auswählen. Beispiel:
y_proba = model.predict(x)
y_classes = keras.np_utils.probas_to_classes(y_proba)
Dies entspricht model.predict_classes(x)
auf dem Sequential-Modell.
Der Grund dafür ist, dass die funktionale API eine allgemeinere Klasse von Aufgaben unterstützt, bei der predict_classes()
keinen Sinn ergibt.
Weitere Informationen: https://github.com/fchollet/keras/issues/2524
Wenn man flow_from_directory verwendet, besteht das Problem darin, die Wahrscheinlichkeitsausgaben zu interpretieren. Wie man die Wahrscheinlichkeitsausgaben und die Klassenbezeichnungen so abbildet, wie flow_from_directory one-hot-Vektoren erzeugt, ist im Stand der Technik nicht bekannt.
Wir können ein Wörterbuch bekommen, die die Klasse Etiketten auf den Index des Vorhersagevektorkarten, die wir als die Ausgabe erhalten, wenn wir
generator= train_datagen.flow_from_directory("train", batch_size=batch_size)
label_map = (generator.class_indices)
Die label_map Variable ist ein Wörterbuch wie dieses
{'class_14': 5, 'class_10': 1, 'class_11': 2, 'class_12': 3, 'class_13': 4, 'class_2': 6, 'class_3': 7, 'class_1': 0, 'class_6': 10, 'class_7': 11, 'class_4': 8, 'class_5': 9, 'class_8': 12, 'class_9': 13}
verwenden
Daraus kann dann die Beziehung zwischen den Wahrscheinlichkeitswerten und Klassennamen abgeleitet werden.
Grundsätzlich können Sie dieses Wörterbuch nach diesem Code erstellen.
from glob import glob
class_names = glob("*") # Reads all the folders in which images are present
class_names = sorted(class_names) # Sorting them
name_id_map = dict(zip(class_names, range(len(class_names))))
Die Variable name_id_map in dem obigen Code enthält auch die gleichen Wörterbücher wie die von class_indices Funktion der flow_from_directory erhalten.
Hoffe, das hilft!
- 1. ROC für Vorhersagen - wie Klassenbezeichnungen definiert werden
- 2. Zuweisen von Klassenbezeichnungen mit dem nächsten Nachbar-Klassifizierer in R
- 3. Theanos Fehler von keras
- 4. Plotkoordinaten mit verschiedenen Farben, die Klassenbezeichnungen in Matplotlib entsprechen
- 5. Keras Eingabedatenformat
- 6. Keras: chmod Ergebnisse nicht Keras Modul
- 7. keras benutzerdefinierte Zielfunktion, Daten in y_pred, y_true erhalten?
- 8. Keras Modell von NN schematisch
- 9. Wie reproduzierbares Ergebnis erhalten, wenn Keras mit Tensorflow Backend
- 10. Wie hängt Weka Klassenbezeichnungen an einen Testdatensatz an?
- 11. Wie erhalten Sie Verlust und Modellausgabe auf einmal in Keras?
- 12. Keras bekommen Ausgabe von intermidate Schichten
- 13. Keras fusionieren Schicht Warnung
- 14. Anfügen von Klassenetiketten an ein Keras-Modell
- 15. Keras LSTM Zustand
- 16. Keras + IndexError
- 17. Keras Assertionsfehler
- 18. Python Keras cross_val_score Fehler
- 19. Keras ignoriert Werte in $ HOME/.keras/keras.json Datei
- 20. Keras friert bei der Verwendung von ImageDataGenerator
- 21. Verwenden von Tensorflow-Schichten in Keras
- 22. Verwenden von Keras für die Textklassifizierung
- 23. Keras Fehler bei der Verwendung von Lambda
- 24. Kann Input von ImageNet-Klassen [Keras + Tensorflow]
- 25. Visualisierung von Keras Convolution Layer Outputs
- 26. Saliency Karten von neuronalen Netzen (mit Keras)
- 27. Keras Individuelle Zusammenführen von zwei Tensoren
- 28. concat_axis in der Merge-Funktion von Keras
- 29. Variablen von Schichten in Keras Zugriff
- 30. Mehrere Ausgänge in Keras
Momentan hat der Code für np.utils.py (siehe https://github.com/fchollet/keras/blob/master/keras/utils/np_utils.py) keine probas_to_classes-Methode. Haben sie das in eine andere Funktion geändert? Bitte hilf mir. – noobalert
Ich habe das gleiche Problem wie @noobalert erwähnt, es hat nicht die Funktion. –
Verwenden Sie 'y_classes = y_proba.argmax (axis = -1)' stattdessen – Zach