Ich habe ein Tutorial verfolgt, um einen Klassifikator mit Keras zu trainieren.
Aus dem zweiten Skript des Autors wollte ich das Skript in ein Skript umwandeln, das trainiert werden kann Mehrklassen-Klassifikator (war eine Binärdatei für Katze und Hund). Ich habe 5 Klassen in meinem Zugordner, also habe ich folgende Änderung vorgenommen:
In der Funktion von train_top_model ():
Ich habe mich geändert
%Vor%in
%Vor%Nach dem Training erreichte das Modell eine Trainingsgenauigkeit von fast 99%, aber nur für eine Genauigkeit von 70% der Validierungsgenauigkeit. So fing ich an zu denken, dass es vielleicht nicht so einfach ist, 2 Klassen Training in 5 Klassen zu verwandeln. Vielleicht muss ich bei der Beschriftung der Klassen die One-Hot-Codierung verwenden (aber ich weiß nicht wie)
Ich habe auch mein Feintrieb-Skript beigefügt. Ein weiteres Problem: Die Genauigkeit wurde nicht effektiv erhöht, wenn der Feintrieb startet.
%Vor% Verwenden Sie softmax
als Aktivierungsfunktion der Ausgabeschicht, dies ist eine Verallgemeinerung der logistischen Funktion für einen Fall mit mehreren Klassen. Lesen Sie mehr darüber hier .
Wenn der Validierungsfehler viel größer als der Trainingsfehler ist, wie in Ihrem Fall, ist dies ein Anzeichen für Überanpassung. Sie sollten eine Regularisierung durchführen, die definiert ist als jede Änderung des Lernalgorithmus, die den Testfehler reduzieren soll, aber nicht den Trainingsfehler. Sie können Dinge wie Datenerhöhung, frühes Anhalten, Rauschinjektion, aggressiveres Aussetzer usw. ausprobieren.
Wenn Sie die gleichen Einstellungen wie im verknüpften Lernprogramm haben, ändern Sie class_mode
von train_generator
und validation_generator
in categorical
und es wird eine einzige Kodierung für Ihre Klassen geben.
Tags und Links python deep-learning machine-learning keras one-hot-encoding