Ich versuche, Faltungs-Neuronale Netze besser zu verstehen, indem ich Python-Code schreibe, der nicht von Bibliotheken (wie Convnet oder TensorFlow) abhängt Durchführen einer Faltung an einem Bild.
Ich versuche, die Implementierungsdetails im Schritt zwischen Feature-Maps in der folgenden Abbildung zu verstehen, in der die Layer eines CNN dargestellt sind.
Nach diesem Diagramm:
Der Kernel-Matrix-Kernel "springt" über das Bild und erstellt eine Feature-Map, bei der jedes Pixel die Summe aller elementweisen Produkte zwischen jedem Gewicht des Kernels (oder der Filtermatrix) und dem entsprechenden Pixelwert des Eingabebilds ist.
Meine Frage ist: Wie initialisieren wir die Gewichte der Kernel- (oder Filter-) Matrix?
In der obigen Demonstration sind sie einfach Einsen und Nullen, aber ich nehme an, dass dies aus Gründen des Diagramms vereinfacht ist.
Werden diese Gewichte in einem Vorverarbeitungsschritt trainiert? Oder vom Benutzer explizit gewählt?
quelle
Ich kann wegen der schlechten Reputation keinen Kommentar abgeben und schreibe dies als Antwort auf Felipe Almeidas Frage. Nach der perfekten Antwort von Indie AI gibt es nicht viel hinzuzufügen. Wenn Sie bestimmte Formen erkennen möchten (z. B. ein X), können Sie einen bestimmten Filter vorab definieren, wie dies bei der Kantenerkennung der Fall ist. Aber das ist das Schöne am tiefen Lernen: Es gibt so viele Ebenen, so viele Filter und so viele Iterationen, dass die Filter fast jede Objektform für sich lernen. Wenn also theoretisch ein X zu erkennen ist, lernt einer der Filter, ein X zu erkennen (als Gelbfilter).
quelle