Das Debuggen von neuronalen Netzwerken umfasst normalerweise das Optimieren von Hyperparametern, das Visualisieren der erlernten Filter und das Zeichnen wichtiger Metriken. Können Sie uns mitteilen, welche Hyperparameter Sie verwendet haben?
- Was ist Ihre Losgröße?
- Wie hoch ist Ihre Lernrate?
- Welche Art von Autoencoder verwenden Sie?
- Haben Sie versucht, einen Denoising-Autoencoder zu verwenden? (Welche Korruptionswerte haben Sie versucht?)
- Wie viele versteckte Ebenen und von welcher Größe?
- Was sind die Abmessungen Ihrer Eingabebilder?
Das Analysieren der Trainingsprotokolle ist ebenfalls hilfreich. Zeichnen Sie ein Diagramm Ihres Rekonstruktionsverlusts (Y-Achse) als Funktion der Epoche (X-Achse). Konvergiert oder divergiert Ihr Rekonstruktionsverlust?
Hier ist ein Beispiel für einen Autoencoder für die Klassifizierung des menschlichen Geschlechts, der divergiert, nach 1500 Epochen gestoppt, Hyperparameter eingestellt (in diesem Fall eine Verringerung der Lernrate) und mit denselben Gewichten neu gestartet wurde, die divergierten und schließlich konvergierten.
Hier ist eine, die konvergiert: (Wir wollen dies)
Vanille "ungezwungen" kann auf ein Problem stoßen, bei dem sie einfach die Identitätszuordnung lernt. Dies ist einer der Gründe, warum die Community die Geschmacksrichtungen Denoising, Sparse und Contractive entwickelt hat.
Könnten Sie hier einen kleinen Teil Ihrer Daten posten? Ich würde Ihnen gerne die Ergebnisse eines meiner Autoencoder zeigen.
Nebenbei bemerkt: Vielleicht möchten Sie sich fragen, warum Sie überhaupt Grafiken verwenden, wenn diese Grafiken leicht als Datenvektor dargestellt werden können. Dh
[0, 13, 15, 11, 2, 9, 6, 5]
Wenn Sie das Problem wie oben beschrieben umformulieren können, wird die Lebensdauer Ihres Auto-Encoders wesentlich erleichtert. Es muss nicht erst lernen, wie man Bilder sieht, bevor es versuchen kann, die erzeugende Verteilung zu lernen.
Follow-up-Antwort (angesichts der Daten.)
Hier sind die Filter eines einschichtigen Denoising Autoencoders mit 1000 versteckten Einheiten. Beachten Sie, dass einige der Filter scheinbar zufällig sind. Das liegt daran, dass ich so früh mit dem Training aufgehört habe und das Netzwerk keine Zeit hatte, diese Filter zu lernen.
Hier sind die Hyperparameter, mit denen ich es trainiert habe:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
Nach der 58. Epoche hörte ich mit dem Vortraining auf, weil die Filter gut genug waren, um hier zu posten. Wenn ich Sie wäre, würde ich einen vollwertigen 3-Schichten-Denoising-Autoencoder mit einer 1000x1000x1000-Architektur trainieren, um anzufangen.
Hier sind die Ergebnisse des Feineinstellungsschritts:
validation error 24.15 percent
test error 24.15 percent
Auf den ersten Blick scheint es jedoch besser zu sein als der Zufall, wenn wir uns die Datenaufteilung zwischen den beiden Etiketten ansehen, sehen wir, dass sie genau den gleichen Prozentsatz hat (75,85% rentabel und 24,15% unrentabel). Das heißt, das Netzwerk hat gelernt, einfach "profitabel" zu reagieren, unabhängig vom Signal. Ich würde das wahrscheinlich für eine längere Zeit mit einem größeren Netz trainieren, um zu sehen, was passiert. Es sieht auch so aus, als würden diese Daten aus einem zugrunde liegenden Finanzdatensatz generiert. Ich würde empfehlen, dass Sie sich mit rekurrenten neuronalen Netzen befassen, nachdem Sie Ihr Problem wie oben beschrieben in Vektoren umformuliert haben. RNNs können dabei helfen, einige der zeitlichen Abhängigkeiten zu erfassen, die in solchen Zeitreihendaten zu finden sind. Hoffe das hilft.
Ich habe nicht genug Repräsentanten, um einen Kommentar abzugeben, daher werde ich dies in die Antwort einfließen lassen. Ich kenne jedoch keinen genauen Grund:
Das Muster im linken unteren Bereich ähnelt Ihrem zweiten Beispiel, und das Muster in der rechten unteren Ecke ähnelt Ihrem ersten Beispiel, wenn es genau untersucht wird. Die Frage ist, wie vielfältig Ihre Quelldaten sind. Wenn alle 50.000 Bilder Variationen desselben Musters sind, können diese 3 aussagekräftigen Funktionskarten ausreichen, damit der Autoencoder alle Ihre Daten erklärt und rekonstruiert.
Zweitens möchten Sie möglicherweise einen Blick auf den Rekonstruktionsfehler und die tatsächlich rekonstruierten Bilder werfen. Wie gut sind die Ergebnisse? Wenn der Rekonstruktionsfehler gering ist, liegt möglicherweise eine Überanpassung vor, möglicherweise aufgrund der unten beschriebenen Gründe (oder die Kombination dieser drei Muster reicht gerade aus, um alle Daten zu beschreiben, an denen Sie interessiert sind). Andernfalls kann Autoencoder einfach nicht lernen, wie Sie Ihre Daten rekonstruieren, und Sie benötigen einen größeren Autoencoder oder einen besseren Trainingsalgorithmus.
quelle