Was ist die Tiefe des convolutional neural network?
Ich war einen Blick auf das Convolutional Neural Network von CS231n Convolutional Neural Networks for Visual Recognition. In Convolutional Neural Network, das sind die Neuronen angeordnet in 3 Dimensionen(height
, width
, depth
). Ich habe ein Problem mit der depth
des CNN. Ich kann nicht visualisieren, was es ist.
In der link Sie sagte The CONV layer's parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume
.
Beispielsweise loook auf dieses Bild. Sorry, wenn das Bild ist zu beschissen.
Ich kann, die Idee zu begreifen, dass wir einen kleinen Bereich aus dem Bild, dann vergleichen Sie es mit dem "Filter". Also der Filter wird die Sammlung von kleinen Bildern? Auch Sie sagte We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron.
So ist das rezeptive Feld hat die gleiche dimension wie der Filter? Auch was die Tiefe der hier? Und was tun wir abrufen, erklären sich mit der Tiefe von CNN?
So, meine Frage ist vorallem, wenn ich ein Bild mit dimension der [32*32*3]
(Lets sagen, ich habe 50000 dieser Bilder, so dass die dataset -[50000*32*32*3]
), was soll ich wählen, der in seiner Tiefe und was würde es bedeuten, von der Tiefe. Auch was die dimension der Filter?
Außerdem wird es sehr hilfreich wenn jemand einen gewissen link, dass einige die intuition auf diese.
BEARBEITEN:
So wird in einem Teil des Tutorials(Real-world-Beispiel-Teil), es sagt The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].
Hier sehen wir die Tiefe ist in der 96. So ist die Tiefe etwas, das ich wähle willkürlich? oder etwas, was ich berechnen? Auch im obigen Beispiel(Krizhevsky et al) hatte Sie 96 tiefen. Also, was bedeutet es, indem seine 96 Tiefe? Auch das tutorial erklärt Every filter is small spatially (along width and height), but extends through the full depth of the input volume
.
Also das bedeutet, dass die Tiefe wird wie diese? Wenn ja, dann kann ich davon ausgehen Depth = Number of Filters
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Tiefe Neuronale Netze die Tiefe bezieht sich darauf, wie tief das Netz ist aber in diesem Zusammenhang, die Tiefe ist verwendet für die visuelle Wiedererkennung und er übersetzt die 3. dimension des Bildes.
In diesem Fall müssen Sie ein Bild, und die Größe ist dieser Eingang 32x32x3 die
(width, height, depth)
. Das neuronale Netzwerk sollte in der Lage sein zu lernen, basierend auf diesen Parametern, wie die Tiefe übersetzt, um die verschiedenen Kanäle der Schulung Bilder.UPDATE:
In jeder Schicht der CNN, es lernt Gesetzmäßigkeiten über die Ausbildung der Bilder. In der ersten Schichten, die Gesetzmäßigkeiten sind die Rundungen und Kanten, dann, wenn Sie tiefer gehen entlang der Ebenen, die Sie anfangen, zu lernen, die höheren Ebenen von Regelmäßigkeiten, wie Farben, Formen, Gegenstände etc. Dies ist die grundlegende Idee, aber es gibt viele technische details. Bevor es weiter gehen geben Sie diese ein Schuss : http://www.datarobot.com/blog/a-primer-on-deep-learning/
UPDATE 2:
Haben Sie einen Blick auf die erste Abbildung in dem link, den Sie zur Verfügung gestellt. Es sagt " In diesem Beispiel, die rote input-Schicht hält das Bild, also seine Breite und Höhe werden die Maße des Bildes und die Tiefe wäre 3 (Rot -, Grün-und Blau-Kanäle).' Es bedeutet, dass ein ConvNet neuron verwandelt das input-Bild durch die Anordnung seiner Neuronen, die in drei dimeonsion.
Als eine Antwort auf Ihre Frage, Tiefe entspricht, um die unterschiedlichen Farbkanäle eines Bildes.
Darüber hinaus über die filter-Tiefe. Die tutorial-Staaten.
Jeder filter ist klein räumlich (entlang der Breite und Höhe), sondern erstreckt sich über die gesamte Tiefe der input-Lautstärke.
Was im Grunde bedeutet, dass ein filter ist ein kleiner Teil eines Bildes, das bewegt sich um die Tiefe des Bildes, um zu lernen, die Gesetzmäßigkeiten in der Bild.
UPDATE 3:
In der realen Welt Beispiel habe ich gerade gestöbert, die original-Papier, und es sagt : Die ersten convolutional layer Filter 224×224×3 input-Bild mit 96 Kerne der Größe 11×11×3 mit einer Schrittlänge von 4 Pixel.
In das tutorial bezieht sich die Tiefe wie der Kanal, aber in der realen Welt, die Sie entwerfen können, was für die dimension, die Sie mögen. Nach allem, was ist Ihr design
Tutorial soll Ihnen einen Einblick, wie ConvNets Arbeit in der Theorie, aber wenn ich das design ein ConvNet niemand kann mich stoppen schlägt man mit einer anderen Tiefe.
Macht das Sinn?
depth corresponds to the different color channels of an image
, der tutorial-Seite etwas anderes sagt, in einem Gebiet. In der realen Welt Beispiel Teil des Tutorials sagt erThe Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].
Hier die Tiefe ist nicht 3, sondern 96Ich bin mir nicht sicher, warum dies so ist, gespart mehr so stark. Ich hatte auch Schwierigkeiten zu verstehen, es zuerst, und nur sehr wenige außerhalb von Andrej Karpathy (Dank d00d) erklärt haben. Obwohl, in seinem Kommentar (http://cs231n.github.io/convolutional-networks/), er berechnet die Tiefe der output-volume mit einem anderen Beispiel als in der animation.
Start durch das Lesen der Abschnitt mit dem Titel " Numpy Beispielen'
Hier, wir gehen durch iterativ.
In diesem Fall haben wir eine 11x11x4. (warum starten wir mit 4 ist Art von eigenartige, als wäre es einfacher zu begreifen, mit einer Tiefe von 3)
Wirklich achten Sie auf diese Zeile:
V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0
V ist Ihr output-Volumen. Der null-index ' th-v[0] ist die Spalte, in diesem Fall
V[0] = 0
dies ist die erste Spalte in der output-Lautstärke.V[1] = 0
dies ist die erste Zeile in der Ausgabe-Lautstärke.V[3]= 0
ist die Tiefe. Dies ist die erste Ausgabe Schicht.Nun, hier ist, wo die Leute verwirrt (zumindest ich). Die Eingabe der Tiefe hat absolut nichts zu tun mit dem Ausgang der Tiefe. Die Eingabe der Tiefe nur hat die Kontrolle der filter-Tiefe.
W
im Andrej ' s-Beispiel.Beiseite: viele Menschen Fragen sich, warum 3 ist das standard-input-Tiefe. Für color-input-Bilder, diese werden immer 3 für nur ole-Bilder.
np.sum(X[:5,:5,:] * W0) + b0
(convolution 1)Hier, sind wir zur Berechnung von elementweise zwischen ein Gewichts-Vektor W0 ist 5x5x4. 5x5 ist eine willkürliche Wahl. 4 ist die Tiefe, da müssen wir in übereinstimmung mit unserer input-Tiefe. Das Gewicht vector ist Ihre filter -, kernel -, rezeptive Feld oder was auch immer unkenntlich gemacht, Namen die Menschen sich entscheiden, nennen es die Straße hinunter.
wenn Sie kommen, dies von einem nicht-python-hintergrund, das ist vielleicht, warum es mehr Verwirrung, da array-slicing-notation ist nicht intuitiv. Die Berechnung ist ein Skalarprodukt Ihre erste Faltung-Größe (5x5x4) des Bildes mit der Gewichts-Vektor. Die Ausgabe ist einem einzigen skalaren Wert, welcher der position des ersten filter-output-matrix. Stellen Sie sich eine 4 x 4-matrix repräsentiert die Summe Produkt jedes dieser faltungs-Operationen über die gesamte Eingabe. Jetzt stapeln Sie für jeden filter. , Das wird geben Sie Ihre Lautstärke. In Andrej ' s writeup, er bewegt sich entlang der x-Achse. Die y-Achse bleibt der gleiche.
Hier ist ein Beispiel dafür, was
V[:,:,0]
Aussehen würde in Bezug auf die Windungen. Denken Sie daran, hier, der Dritte Wert unseres index ist die Tiefe der output-Schicht[result of convolution 1, result of convolution 2, ..., ...]
[..., ..., ..., ..., ...]
[..., ..., ..., ..., ...]
[..., ..., ..., result of convolution n]
Die animation ist am besten für dieses Verständnis, aber Andrej beschloss, tauschen Sie es mit einem Beispiel, der nicht mit der Berechnung oben.
Dies dauerte eine Weile. Teilweise, weil numpy nicht index die Weise, die Andrej in seinem Beispiel, zumindest habe ich nicht rumgespielt. Auch, es gibt einige Annahmen, dass die Summe-Produkt-Betrieb ist klar. Das ist der Schlüssel, um zu verstehen, wie Ihre Ausgabe auf Ebene erstellt, was jeder Wert repräsentiert und was die Tiefe ist.
Hoffentlich das hilft!
Tiefe von CONV Ebene ist die Anzahl der Filter, die Sie nutzt.
Die Tiefe des filters ist gleich der Tiefe des Bildes als Eingabe verwenden.
Beispiel: angenommen, Sie verwenden ein Bild von 227*227*3.
Nun angenommen, Sie sind mit einem filter der Größe 11*11(räumliche Größe).
Dieses 11*11 Platz geschoben werden zusammen ein ganzes Bild zu erzeugen, eine 2-dimensionales array als eine Antwort. Aber um dies zu tun, es muss sich auf jeden Aspekt innerhalb von 11*11 Bereich. Daher die Tiefe des filters wird die Tiefe des Bildes = 3.
Nun nehmen wir an, dass 96 solche filter produzieren andere Antwort. Dies wird Tiefe von Convolutional layer. Es ist einfach die Anzahl der verwendeten Filter.
Da die input-Lautstärke aus, wenn wir ein Bild Klassifizierung problem ist
N x N x 3
. Am Anfang ist es nicht schwer, sich vorzustellen, was die Tiefe bedeuten wird - nur die Anzahl der Kanäle -Red, Green, Blue
. Ok, also die Bedeutung für die erste Schicht ist klar. Aber was ist mit den nächsten? Hier ist, wie ich versuche zu visualisieren, die Idee.Auf jeder Ebene wenden wir eine Reihe von filtern, die convolve rund um den Eingang. Können sich vorstellen, dass derzeit sind wir auf der ersten Ebene, und wir convolve um ein Volumen
V
GrößeN x N x 3
. Wie @Semih Yagcioglu wie zu Beginn erwähnt sind wir auf der Suche für einige grobe Funktionen: Kurven, Kanten etc... Können sagen, wir gelten N-Filter gleicher Größe (3x3) mit Schritt 1. Dann jeden von diesen filtern ist die Suche nach einer anderen Kurve oder Kante, während convolving umV
. Natürlich, der filter hat die gleiche Tiefe, die wir versorgen wollen ganzen Informationen, die nicht nur die Graustufen-Darstellung.Nun, wenn
M
Filter Aussehen, für M verschiedene Kurven oder Kanten. Und jeder dieser Filter erzeugt eine feature map bestehend aus skalaren (die Bedeutung der Skalar ist der filter zu sagen: Die Wahrscheinlichkeit, dass diese Kurve hier ist X%). Wenn wir convolve mit den gleichen filtern, um das Volumen erhalten wir diese Karte von skalaren uns zu erzählen, wo, wo genau wir sahen die Kurve.Dann kommt feature map stapeln. Stellen Sie sich stapeln wie die folgende Sache. Wir haben Informationen darüber, wo jeder filter hat erkannt, dass eine bestimmte Kurve. Schön, wenn dann stapeln wir Ihnen erhalten wir Informationen über das, was Kurven /Kanten sind, die an jedem kleinen Teil unserer input-Lautstärke. Und dies ist das Ergebnis unserer ersten convolutional layer.
Ist es leicht zu begreifen, die Idee, die hinter nicht-Linearität bei der Berücksichtigung von
3
. Wenn wir anwenden, die aufgrund der Kr-Funktion auf einige feature map, sagen wir: entfernt alle negativen Wahrscheinlichkeiten für Kurven oder Kanten an dieser Stelle. Und das macht sicherlich Sinn.Dann die Eingabe für die nächste Schicht wird ein Volumen $V_1$ tragen info über die verschiedenen Rundungen und Kanten an unterschiedlichen räumlichen Standorten (denken Sie Daran: Jede Ebene Trägt die info über 1 Kurve oder Kante).
Hoffe, das macht Sinn. Schau dir die erstaunliche Diagramme zur Verfügung gestellt von der berühmten CS231 natürlich zu überprüfen, wie genau die Wahrscheinlichkeit für jede Funktion an einem bestimmten Standort berechnet.
Die erste Sache, die Sie beachten müssen ist
dh, Wenn das rezeptive Feld ist 5x5 das neuron verbunden werden 5x5x(input Tiefe) Anzahl der Punkte. Also was auch immer Ihr input Tiefe, eine Schicht von Neuronen werden sich nur entwickeln, 1 Schicht Ausgabe.
Nun, das nächste, was zu beachten ist
ie Die Lautstärke ist unabhängig von der input-volume, und es hängt nur von der Anzahl-Filter(Tiefe). Dies sollte ziemlich offensichtlich aus dem vorherigen Punkt.
Beachten Sie, dass die Anzahl der Filter (Tiefe der cnn-layer) ist ein hyper-parameter. Sie können nehmen, was immer Sie wollen, unabhängig von Bild Tiefe. Jeder filter hat seinen eigenen Satz von gewichten ermöglicht es zu lernen, eine andere Funktion auf dem gleichen lokalen region, die unter den filter.
Die Tiefe des Netzes ist die Anzahl der Schichten im Netz. In der Krizhevsky Papier, die Tiefe ist in 9 Schichten (modulo einem fencepost Problem mit, wie Schichten gezählt werden?).
In einfachen Worten, es erklären kann, wie unten,
Lassen Sie uns sagen, Sie haben 10 Filter wo jeder filter ist die Größe von 5x5x3. Was bedeutet das? die Tiefe dieser Schicht ist 10 die gleich der Anzahl der Filter. Größe der einzelnen filter definiert werden können, wie wir wollen z.B., 5x5x3 in diesem Fall, wo 3 ist die Tiefe der vorherigen Schicht. Um genau zu sein, die Tiefe der einzelnen filer in die nächste Schicht sollte 10 sein ( nxnx10), wo n kann definiert werden, wie Sie wollen, wie 5 oder etwas anderes. Hoffe wird alles klar.