Was ist die Architektur eines gestapelten Faltungsautocodierers?

23

Ich versuche also, Bilder von Menschen mit Faltungsnetzen zu trainieren. Ich habe die Papiere ( Paper1 und Paper2 ) und diesen Stackoverflow-Link gelesen , bin mir jedoch nicht sicher, ob ich die Struktur der Netze verstehe (in den Papieren ist dies nicht genau definiert).

Fragen:

  • Ich kann meine Eingabe gefolgt von einer Rauschebene gefolgt von einer Konvektionsebene, gefolgt von einer Poolebene - danach - dekoole ich, bevor ich meine Ausgabe gebe (was dasselbe ist wie mein Eingabebild)?

    Angenommen, ich habe mehrere (135.240) Bilder. Wenn ich 32 (12,21) Kernel verwende, gefolgt von (2,2) Pooling, erhalte ich 32 (62, 110) Feature-Maps. Muss ich jetzt den Pool aufheben, um 32 (124, 220) Feature-Maps zu erhalten und sie dann zu reduzieren? bevor ich meine (135,240) Ausgabeebene gebe?

  • Wenn ich mehrere solcher Conv-Pool-Layer habe, sollte ich sie nacheinander trainieren - wie bei gestapelten denoisierten Autoencodern? Oder - kann ich so etwas wie Input-Conv-Pool-Conv-Pool-Conv-Pool-Output haben (Output ist dasselbe wie Input)? Wie soll in diesem Fall das Pooling, Depooling verwaltet werden? Soll ich den Pool nur in der letzten Poolebene vor der Ausgabe entfernen? Und noch einmal - was sollte der Größenänderungsfaktor für diese Aufhebung des Pools sein? Ist die Absicht, die Feature-Maps wieder an die Form der Eingabe anzupassen?

  • Sollte ich nach jeder Conv-Pool-Depool-Schicht Rauschschichten einfügen?

  • Und dann bei der Feinabstimmung - soll ich nur die Entpoolungsschichten entfernen und den Rest gleich lassen. Oder sollte ich sowohl die Rauschschichten als auch die De-Pooling-Schichten entfernen?

  • Kann mir jemand auf eine URL / ein Dokument verweisen, in dem die Architektur eines solchen gestapelten Faltungs-Auto-Encoders für das Pre-Training von Bildern detailliert beschrieben ist?

Run2
quelle

Antworten:

12

Ich erforsche derzeit gestapelte Faltungs-Autoencoder.

Ich werde versuchen, einige Ihrer Fragen nach bestem Wissen zu beantworten. Wohlgemerkt, ich könnte mich irren, also nimm es mit einem Körnchen Salz.

  1. Ja, Sie müssen den Pool "umkehren" und dann mit einer Reihe von Filtern arbeiten, um Ihr Ausgabebild wiederherzustellen. Ein neuronales Standardnetz (unter Berücksichtigung von MNIST-Daten als Eingabe, dh 28 × 28 Eingabedimensionen) wäre:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. Ich verstehe, dass konventionell das ist, was man tun sollte, dh jede Schicht separat trainieren. Danach stapeln Sie die Schichten und trainieren das gesamte Netzwerk noch einmal mit den vortrainierten Gewichten. Yohsua Bengio hat jedoch einige Nachforschungen angestellt (die Referenz entgeht meiner Erinnerung), die belegen, dass man ein vollständig gestapeltes Netzwerk aufbauen und von Grund auf neu trainieren kann.

  3. Mein Verständnis ist, dass "Noise Layer" dazu dient, Robustheit / Variabilität in die Eingabe einzuführen, damit das Training nicht überanstrengt.

  4. Solange Sie noch vor dem Training oder der Feinabstimmung "trainieren", halte ich den Rekonstruktionsteil (dh Rückkühlen, Entfaltung usw.) für erforderlich. Wie sollte man sonst eine Fehler-Rückübertragung durchführen, um die Gewichte abzustimmen?

  5. Ich habe versucht, in zahlreichen Artikeln zu stöbern, aber die Architektur wird nie vollständig erklärt. Wenn Sie welche finden, lassen Sie es mich bitte wissen.

user2979010
quelle
Wenn Sie mit dem Vortraining fertig sind, brauchen Sie den Decoder-Teil nicht mehr und die Feinabstimmung passt den Encoder weiterhin an, diesmal zur besseren Klassifizierung.
Jwalker
2
Wie ist "reverse-maxPool" möglich? Sie können niemals eine Menge von Zahlen rekonstruieren, wenn Sie nur das Maximum angeben ...?
Fequish
1
@Fequish, es ist ein ungefährer Reverse-Maxpool, zB: Wenn pool = 2x2, behalte ich die Position des Max und setze das Max in diese bestimmte Position in 2x2 ein, Rest ist 0
user2979010
1
@jwalker, mein Endziel war nicht die Klassifizierung, daher Feinabstimmung mit einem nicht aufgerollten Netzwerk
user2979010
@Fequish, zum Zwecke der Dekodierung ist die Umkehrung nur ein nächster Nachbar der gehobenen Klasse.
Jwalker
2

Ich habe auch nach einem vollständig erklärten Modell von gestapelten Faltungs-Autoencodern gesucht.

Ich bin auf drei verschiedene Architekturen gestoßen. Ich studiere sie immer noch und dachte, dass sie anderen helfen könnten, die sich ebenfalls mit CAEs befassen. Alle weiteren Verweise auf Dokumente oder Implementierungen würden sehr helfen.

  1. Der von Ihnen erwähnte Pooling - Unpooling.
  2. Die Schichten von (Convolve) __ x_times -> (Deconvolve) __ x_times,

    und erhalten die gleiche Größe wie die Eingabe.

  3. (Faltung -> Pool) __ x_times -> (schrittweise Entfaltung) __ y_times
    • Der Abstand und die Schritte werden so ausgewählt, dass die endgültige Bildgröße der des Originalbilds entspricht.
    • Referenz
Ankitp
quelle
2
Willkommen auf der Seite. War dies als Antwort auf die Frage des OP, als Kommentar, der das OP oder einen der Beantworter um Klärung bittet, oder als eigene neue Frage gedacht? Bitte verwenden Sie nur das Feld "Ihre Antwort", um Antworten auf die ursprüngliche Frage zu erhalten. Sie können überall kommentieren, wenn Ihr Ruf> 50 ist. Wenn Sie eine neue Frage haben, klicken Sie auf das graue ASK QUESTION Feld oben auf der Seite und stellen Sie sie dort. Wir können Ihnen dann richtig helfen. Da Sie neu hier sind, möchten Sie vielleicht an unserer Tour teilnehmen , die Informationen für neue Benutzer enthält.
gung - Wiedereinstellung von Monica
1
Es war als Antwort auf die Frage des OP gedacht, obwohl es möglicherweise keine vollständige Antwort darstellt. Ich antwortete auf den letzten Teil: „Ich habe versucht, in zahlreichen Artikeln zu stöbern, aber die Architektur wird nie vollständig erklärt. Wenn Sie welche finden, lassen Sie es mich bitte wissen. '
Ankitp
OK danke. Die Art und Weise, wie es ausgeht, ist nicht eindeutig. ZB "Ich habe auch gesucht ..." & "Alle weiteren Verweise auf Artikel oder Implementierungen würden sehr helfen". Beachten Sie, dass CV eine reine Q & A-Site ist, kein Diskussionsforum. Nehmen Sie an unserer Tour teil und erfahren Sie mehr über die Website.
gung - Wiedereinsetzung von Monica
-1

Ich denke nicht, dass die schichtweise Trainingsmethode richtig ist. Zum Beispiel ist die Architektur des Faltungsautocodierers:

input-> conv-> max_poo-> de_max_pool-> de_conv-> output.

Dies ist ein Auto-Encoder und sollte mit der gesamten Architektur trainiert werden. Darüber hinaus gibt es kein strenges Kriterium, ob ein Faltungsautocodierer einen Pool und einen un_pool benötigt. Normalerweise ein Pool, aber ohne un_pool. Hier ist ein experimenteller Vergleich mit dem Fehlen von pool und un_pool.

https://arxiv.org/pdf/1701.04949.pdf

Kevin Sun.
quelle