Ich trainiere ein CNN für ein 3-Klassen-Bildklassifizierungsproblem. Mein Trainingsverlust nahm reibungslos ab, was das erwartete Verhalten ist. Mein Validierungsverlust zeigt jedoch große Schwankungen.
Ist dies etwas, worüber ich mir Sorgen machen sollte, oder sollte ich einfach das Modell auswählen, das bei meinem Leistungsmaß (Genauigkeit) am besten abschneidet?
Zusätzliche Informationen: Ich optimiere die letzte Schicht eines Resnet-18, die für ImageNet-Daten in PyTorch vorab trainiert wurde. Ich muss beachten, dass ich für die Trainingsphase eine gewichtete Verlustfunktion verwende, da meine Daten stark unausgeglichen sind. Um die Verluste darzustellen, verwende ich jedoch den ungewichteten Verlust, um den Validierungs- und Trainingsverlust vergleichen zu können. Ich würde den ungewichteten Verlust verwenden, wenn nicht die Verteilungen des Trainingsdatensatzes und des Validierungsdatensatzes etwas unterschiedlich wären (beide sind jedoch stark unausgeglichen).
Antworten:
Aus einer einfachen Überprüfung Ihres Grundstücks könnte ich einige Schlussfolgerungen ziehen und Dinge auflisten, die Sie ausprobieren sollten. (Dies ohne mehr über Ihr Setup zu wissen: Trainingsparameter und Modellhyperparameter).
Es sieht so aus, als würde der Verlust abnehmen (setzen Sie eine Linie der besten Anpassung durch den Validierungsverlust). Es sieht auch so aus, als könnten Sie möglicherweise länger trainieren, um die Ergebnisse zu verbessern, da die Kurve immer noch nach unten zeigt.
Zuerst werde ich versuchen, Ihre Titelfrage zu beantworten:
Ich kann mir drei Möglichkeiten vorstellen:
8
die4/8
Richtigkeit und der Vergleich mit der6/8
Richtigkeit einen großen relativen Unterschied, wenn man den Verlust betrachtet. Wenn man den Mittelwert der Fehler mit solch kleinen Chargen nimmt, führt dies zu einer nicht so glatten Verlustkurve. Wenn Sie über genügend GPU-Speicher / RAM verfügen, erhöhen Sie die Stapelgröße.6
Epochen nicht verbessert hat . Dies verhindert, dass Sie große Schritte unternehmen und dann möglicherweise ein Minimum überschreiten und einfach nur herumhüpfen.Speziell für Ihre Aufgabe würde ich auch vorschlagen, dass Sie versuchen, eine weitere Ebene freizugeben , um den Umfang Ihrer Feinabstimmung zu erhöhen. Dies gibt dem Resnet-18 ein wenig mehr Lernfreiheit, basierend auf Ihren Daten.
Zu Ihrer letzten Frage:
Solltest du dir Sorgen machen? Kurz gesagt, nein. Eine Validierungsverlustkurve wie Ihre kann vollkommen in Ordnung sein und vernünftige Ergebnisse liefern. Ich würde jedoch einige der oben genannten Schritte ausprobieren, bevor ich mich damit begnüge.
Sollten Sie nur das leistungsstärkste Modell auswählen? Wenn Sie damit meinen, das Modell an seinem Punkt mit dem besten Validierungsverlust (Validierungsgenauigkeit) zu nehmen, würde ich sagen, dass Sie vorsichtiger sein sollten. In Ihrer obigen Darstellung könnte dies ungefähr der 30. Epoche entsprechen, aber ich persönlich würde einen Punkt annehmen, der etwas mehr trainiert hat, wo die Kurve etwas weniger volatil wird. Nachdem Sie einige der oben beschriebenen Schritte ausgeführt haben.
quelle
Ich würde auch empfehlen, dass Sie Methoden zur Datenerweiterung und Überabtastung verwenden, um das Ungleichgewicht der Klassen auszugleichen. In diesem Standford-Artikel werden einige der Ideen erläutert, mit denen Sie die Effektivität der Datenerweiterung bei der Bildklassifizierung mithilfe von Deep Learning implementieren können .
Ich hoffe das hilft!
quelle