2

Ich habe mit dieser Online-Demo von einem In-Browser https://cs.stanford.edu/people/karpathy/convnetjs/demo/image_regression.html gespielt und ich habe versucht, das Bild mit Text (der mit "Was sagt der Fuchs sagen ..." Überschrift) um klarer (mit lesbarem Text), ohne Erfolg.Was ist der beste Weg, um ein neuronales Netzwerk zu überfrachten?

Dieses neuronale Netzwerk empfängt zwei Eingänge - X- und Y-Positionen eines Pixels und drei Ausgänge - RGB-Kanäle für das Pixel. Das Netzwerk wird durch ein ausgewähltes Bild trainiert und versucht dann, es "zu zeichnen".

Ich möchte dieses Netzwerk so trainieren, dass jedes Pixel so nah wie möglich an das Originalbild angepasst wird, d. H. Es zu überfrachten. Wie kann dies erreicht werden? Welche Kombination oder Parameter sollten verwendet werden? Vielleicht muss die Struktur der Netzwerke anders sein (mehr Schichten, mehr Neuronen in Schichten, verschiedene Arten von Schichten, etc.)?

Ich habe versucht, mit dem Lernrate zu spielen, ohne die Struktur vom Original zu verändern, sondern auch nach 400k Iterationen der meisten des Textes ist nicht zu unterscheiden:

screenshot after 400k iterations

Ist es nur eine Frage der Zeit und Vielleicht wird nach einigen Millionen Iterationen das gewünschte Ergebnis erreicht? Kann es irgendwie beschleunigt werden (ohne die Rechenleistung und andere offensichtliche Dinge zu erhöhen)?

Es scheint, dass es eine wirklich einfache Aufgabe sein sollte, den gleichen Wert für die gleichen Eingaben jedes Mal wiederzugeben - das Netzwerk wird exakt hunderttausende Male auf die gleichen Daten trainiert, also warum gibt es immer noch so viele zurück graue Pixel?

Ich bin neu in neuronalen Netzen, also vielleicht ist es eine dumme Frage und neuronale Netze können dafür überhaupt nicht verwendet werden.

+0

Haben Sie eine semantische Segmentierung versucht? –

+0

Nein. Können Sie mir bitte zeigen, wie es mit dieser spezifischen JS-Bibliothek gemacht werden kann? –

+0

Ich weiß nicht, über diese JS-Bibliothek, aber ich habe semantische Segmentierung für Bilder in Caffe verwendet. –

Antwort

4

Es wird ziemlich schwierig sein, ein solches Netzwerk zu überfrachten, da es effektiv nur Regressor aus 2D ist, also müssen Sie sehr "holprige" Oberflächen modellieren. Was Sie brauchen, ist viele versteckte Einheiten - das ist im Wesentlichen, was Ihnen die Fähigkeit zu überziehen gibt.

Ist es nur eine Frage der Zeit und vielleicht wird nach einigen Millionen Iterationen das gewünschte Ergebnis erzielt?

Nein, Netzwerk kann tatsächlich zu kleine Kapazität haben, um das Problem darzustellen.

Kann es irgendwie beschleunigt werden (ohne die Prozessorleistung und andere offensichtliche Sachen zu erhöhen)?

Ja, nicht verwenden .js (irgendwie offensichtlich, aber dies soll Web-basierte Beispiel sein, nicht effiziente Technik).

Es scheint, dass es immer eine wirklich einfache Aufgabe sein wird, den gleichen Wert für die gleichen Eingaben jedes Mal wiederzugeben - das Netzwerk wird genau hundertmal an genau denselben Daten trainiert, also warum kehrt es immer noch zurück so viele graue Pixel?

Warum ist es schwer? Sollten sich NNs nicht leicht überziehen lassen? Sie passen leicht für hohe dimensionale Probleme, wo Ihre Datenpunkte sind einfach zu trennen mit Hyperplanes Kombinationen (die Bausteine ​​von neuronalen Netzen sind). Hier arbeiten Sie mit 2D-Daten mit sehr geringer Dimension und sehr dichten Daten, die von der typischen NN-Methode entfernt sind.Wenn Sie ein Bild leicht lernen möchten, sollten Sie ein Bild als ein ganzes Bild behandeln. Hier ist stattdessen jedes Pixel eine Eingabe, die den Lernprozess für NN relativ schwierig macht.

+0

Danke für eine ausführliche Antwort. Also, es gibt keine Möglichkeit, es mit dieser JS-Bibliothek und ähnlichen Netzwerk-Setup (1 Pixel als Eingabe) zu tun? Sie sagten, dass viele versteckte Eingaben helfen können, irgendwelche Ideen zu den genauen Zahlen? –

Verwandte Themen