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,
Antworten:
Standardmäßig werden die FilterW zufällig mit der W∼ U( 6ni n+ no u t, - 6ni n+ no u t) ,
glorot_uniform
Methode initialisiert , die Werte aus einer gleichmäßigen Verteilung mit positiven und negativen Grenzen zieht, die folgendermaßen beschrieben werden:wobeini n ist die Anzahl der Einheiten , die in diese Vorschubeinheit, und no u t 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:
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.
quelle
glorot_uniform
verwendet nicht die Normalverteilung. Ich denke du beschreibstglorot_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).glorot_normal
undglorot_uniform
und 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.Das überarbeitete Modell trainiert die Kernel gemäß Ihrer Kostenfunktion und am Ende sind diese Kernel die Filter Ihres Modells.
quelle