Welche Standardfilter werden von Keras Convolution2d () verwendet?


18

Ich bin ziemlich neu in neuronalen Netzen, aber ich verstehe die lineare Algebra und die Faltungsmathematik ziemlich gut.

Ich versuche, den Beispielcode zu verstehen, den ich an verschiedenen Stellen im Internet finde, um eine Keras-Faltungs-NN mit MNIST-Daten zu trainieren, um Ziffern zu erkennen. Meine Erwartung wäre, dass ich beim Erstellen einer Faltungsebene einen Filter oder eine Reihe von Filtern angeben müsste, die auf die Eingabe angewendet werden sollen. Aber die drei Samples, die ich gefunden habe, bilden alle eine Faltungsschicht wie diese:

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

Dies scheint insgesamt 32 3x3-Filter auf die vom CNN verarbeiteten Bilder anzuwenden. Aber was sind das für Filter? Wie würde ich sie mathematisch beschreiben? Die Keras-Dokumentation ist keine Hilfe.

Danke im Voraus,


2
Dies ergibt sich aus dem Verständnis des Faltungsteils von CNN. Sie können hier lesen: cs231n.github.io/convolutional-networks
Christian Safka

Antworten:


15

Standardmäßig werden die Filter W zufällig mit der glorot_uniformMethode initialisiert , die Werte aus einer gleichmäßigen Verteilung mit positiven und negativen Grenzen zieht, die folgendermaßen beschrieben werden:

WU(6nichn+nOut,-6nichn+nOut),

wobei nichn ist die Anzahl der Einheiten , die in diese Vorschubeinheit, und nOut die Anzahl der Einheiten Dieses Ergebnis zugeführt wird , ist.

Wenn Sie das Netzwerk zur Erstellung einer Vorhersage verwenden, werden diese Filter auf jeder Ebene des Netzwerks angewendet. Das heißt, für jeden Filter wird für jedes Eingangsbild eine diskrete Faltung durchgeführt, und die Ergebnisse dieser Faltungen werden der nächsten Faltungsschicht (oder einer vollständig verbundenen Schicht oder was auch immer Sie sonst haben) zugeführt.

Während des Trainings werden die Werte in den Filtern mit Rückübertragung in Bezug auf eine Verlustfunktion optimiert. Für Klassifizierungsaufgaben wie das Erkennen von Ziffern wird normalerweise der Kreuzentropieverlust verwendet. Hier ist eine Visualisierung einiger Filter, die in der ersten Ebene (oben) und in der zweiten Ebene (unten) eines Faltungsnetzwerks gelernt wurden:

Conv Net Filter Visualisierung

Wie Sie sehen, fungieren die Filter der ersten Schicht im Grunde genommen alle als einfache Kantendetektoren, während die Filter der zweiten Schicht komplexer sind. Je tiefer Sie in ein Netzwerk vordringen, desto komplexer werden die Formen. Die Visualisierung ist jedoch etwas schwierig, da diese Filter auf Bilder angewendet werden, die bereits oft gefaltet wurden und wahrscheinlich nicht so aussehen wie das ursprüngliche natürliche Bild.


5
glorot_uniformverwendet nicht die Normalverteilung. Ich denke du beschreibst glorot_normal. Ich denke nicht, dass dies für die Antwort von großer Bedeutung ist - die wichtigsten Punkte sind zufällige Initialisierung, gefolgt von Trainingseffekten. Könnte es wert sein, erklärt zu werden, wie die trainierten Filter wie Kanten- / Eckfilter aussehen (möglicherweise mit einem der klassischen Bilder von Filtern der ersten Schicht vor / nach dem Training).
Neil Slater

Tim, danke für die Rechenaufgabe. @Neil Slater - Ihre Erkenntnis, dass die Filter nach dem Training mit Backpropagation möglicherweise wie Kantenerkennung usw. aussehen, war sehr hilfreich. Wenn ich mehr Reputation hätte, würde ich Ihre beiden Beiträge +1 geben.
ChrisFal

@NeilSlater Vielen Dank für Ihren Kommentar - Sie haben Recht, ich hatte verwirrt glorot_normalund glorot_uniformund ich habe die Antwort aktualisiert, um dies widerzuspiegeln. Ich habe auch ein paar zusätzliche Informationen hinzugefügt, wie die Filter enden, wie Sie vorgeschlagen haben.
timleathart

6

EINFkBk(ich,j)

Bk(ich,j)=(FkEIN)(ich,j)=l=0,1,2m=0,1,2Fk(l,m)EIN(ich-l,j-m)

Bildbeschreibung hier eingeben

Das überarbeitete Modell trainiert die Kernel gemäß Ihrer Kostenfunktion und am Ende sind diese Kernel die Filter Ihres Modells.


Ich habe diese Mathematik verstanden, aber ich bin sicher, dass viele Leser dieses Threads das Diagramm hilfreich finden werden. So danke!
ChrisFal

imghost.in/images/2018/03/06/XvatD.jpg Vielleicht muss das Bild mit den Koordinaten (0,0) auf B sein?
Winnitu

@ vinnitu ja, in der Tat. Eigentlich muss ich auch das B in Bk (i, j) ändern (i = 0,1,2, j = 0,1,2).
lucky6qi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.