it-swarm.com.de

Was ist die Tiefe eines konvolutionellen neuronalen Netzwerks?

Ich habe mir Convolutional Neural Network von CS231n Convolutional Neural Networks for Visual Recognition angesehen. In Convolutional Neural Network sind die Neuronen in 3 Dimensionen angeordnet (height, width, depth). Ich habe Probleme mit der depth des CNN. Ich kann mir nicht vorstellen, was es ist. 

In dem Link sagten sie 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

Schauen Sie sich zum Beispiel dieses Bild an. Sorry, wenn das Bild zu beschissen ist.  crappy picture

Ich kann die Idee verstehen, dass wir eine kleine Fläche aus dem Bild nehmen und sie dann mit den "Filtern" vergleichen. Die Filter werden also eine Sammlung kleiner Bilder sein? Sie sagten auch 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. Ist das aufnahmefähige Feld die gleiche Dimension wie die Filter? Was wird auch die Tiefe hier sein? Und was bedeuten wir unter Verwendung der Tiefe eines CNN?

Meine Frage ist also hauptsächlich, wenn ich ein Bild mit der Dimension [32*32*3] (Lass uns sagen, dass ich 50000 dieser Bilder habe und den Datensatz [50000*32*32*3] mache), was soll ich als Tiefe wählen und was würde das für die Tiefe bedeuten. Was ist auch die Dimension der Filter?

Es wird auch sehr hilfreich sein, wenn jemand einen Link bereitstellen kann, der ein wenig Intuition zu diesem Thema vermittelt.

EDIT: In einem Teil des Tutorials (Real-World-Beispielteil) heißt es 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 96. Also ist Tiefe etwas, das ich willkürlich wähle? oder etwas, das ich berechne? Auch im obigen Beispiel (Krizhevsky et al.) Hatten sie 96 Tiefen. Was bedeutet es also mit seinen 96 Tiefen? Auch im Tutorial wurde Every filter is small spatially (along width and height), but extends through the full depth of the input volume angegeben.

Das heißt also, dass die Tiefe so sein wird? Wenn ja, dann kann ich davon ausgehen, dass Depth = Number of Filters?  enter image description here

25
Shubhashis

In Deep Neural Networks bezieht sich die Tiefe auf die Tiefe des Netzwerks. In diesem Zusammenhang wird jedoch die Tiefe zur visuellen Erkennung verwendet und in die Dimension 3rd eines Bildes übersetzt.

In diesem Fall haben Sie ein Bild und die Größe dieser Eingabe ist 32x32x3, was (width, height, depth) ist. Das neuronale Netzwerk sollte in der Lage sein, basierend auf diesen Parametern zu lernen, da sich die Tiefe auf die verschiedenen Kanäle der Trainingsbilder überträgt.

UPDATE:

In jeder Schicht Ihres CNN werden Regelmäßigkeiten über Trainingsbilder gelernt. In den allerersten Schichten sind die Regelmäßigkeiten Kurven und Kanten. Wenn Sie die Ebenen weiter vertiefen, lernen Sie höhere Regelebenen wie Farben, Formen, Objekte usw. kennen. Dies ist die Grundidee, aber es gibt viele technische Details. Bevor Sie fortfahren, geben Sie einen Versuch: http://www.datarobot.com/blog/a-primer-on-deep-learning/

UPDATE 2:

Schauen Sie sich die erste Abbildung in dem Link an, den Sie angegeben haben. Es sagt 'In diesem Beispiel enthält die rote Eingabeebene das Bild, dh Breite und Höhe entsprechen den Abmessungen des Bildes und die Tiefe 3 (rote, grüne, blaue Kanäle).' Dies bedeutet, dass ein ConvNet-Neuron das Eingabebild transformiert, indem es seine Neuronen in drei Dimensionen anordnet. 

Als Antwort auf Ihre Frage gilt Tiefe entspricht den verschiedenen Farbkanälen eines Bildes.

Darüber hinaus über die Filtertiefe. Das Tutorial erklärt dies.

Jeder Filter ist räumlich (entlang der Breite und Höhe) klein, erstreckt sich jedoch über die gesamte Tiefe des Eingabevolumens.

Was im Wesentlichen bedeutet, dass ein Filter ist ein kleinerer Teil eines Bildes, der sich in der Tiefe des Bildes bewegt, um die Regelmäßigkeiten im Bild zu lernen.

UPDATE 3:

Für das Beispiel aus der realen Welt habe ich nur das Originalpapier durchsucht und es heißt folgendes: Die erste Faltungsschicht filtert das 224 × 224 × 3-Eingabebild mit 96 Körnern der Größe 11 × 11 × 3 mit einem Schritt von 4 Pixeln.

Im Tutorial wird die Tiefe als Kanal bezeichnet. In der Realität können Sie jedoch beliebige Dimensionen entwerfen. Nach all dem ist Ihr Design

Das Tutorial soll Ihnen einen Einblick in die theoretische Arbeitsweise von ConvNets vermitteln, aber wenn ich ein ConvNet entwerfe, dann darf niemand kann mich davon abhalten, eines mit einer anderen Tiefe vorzuschlagen.

Ist das sinnvoll?

10
Semih Yagcioglu

Ich bin mir nicht sicher, warum dies so stark verkürzt wird. Anfangs hatte ich auch Probleme, es zu verstehen, und nur sehr wenige außerhalb von Andrej Karpathy (danke d00d) haben es erklärt. Obwohl er in seiner Beschreibung ( http://cs231n.github.io/convolutional-networks/ ) die Tiefe des Ausgabevolumens anhand eines anderen Beispiels als in der Animation berechnet.

Lesen Sie zunächst den Abschnitt mit dem Titel " Numpy examples ".

Hier gehen wir iterativ durch.

In diesem Fall haben wir eine 11x11x4. (Warum wir mit 4 beginnen, ist etwas Besonderes, da es mit einer Tiefe von 3 leichter zu erfassen wäre.)

Achten Sie wirklich auf diese Zeile:

Eine Tiefensäule (oder eine Faser) an Position (x, y) wäre die Aktivierung von X [x, y ,:].

Eine Tiefenscheibe oder äquivalent eine Aktivierungskarte in der Tiefe d wären die Aktivierungen X [:,:, d].

V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0

V ist Ihr Ausgangsvolumen. Der nullte Index v [0] ist Ihre Spalte - in diesem Fall V[0] = 0 Ist dies die erste Spalte in Ihrem Ausgabevolumen. V[1] = 0 Dies ist die erste Zeile in Ihrem Ausgabevolumen. V[3]= 0 Ist die Tiefe. Dies ist die erste Ausgabeebene.

Hier werden die Leute verwirrt (zumindest ich). Die Eingabetiefe hat absolut nichts mit Ihrer Ausgabetiefe zu tun. Die Eingangstiefe hat nur Kontrolle über die Filtertiefe. W in Andrejs Beispiel.

Nebenbei: Viele Leute fragen sich, warum 3 die Standardeingabetiefe ist. Bei Farbeingabebildern ist dies immer 3 für einfache alte Bilder.

np.sum(X[:5,:5,:] * W0) + b0 (Faltung 1)

Hier berechnen wir elementweise zwischen einem Gewichtsvektor W0, der 5 × 5 × 4 ist. 5x5 ist eine willkürliche Wahl. 4 ist die Tiefe, da wir unsere Eingabetiefe anpassen müssen. Der Gewichtsvektor ist Ihr Filter, Ihr Kernel, Ihr Empfangsfeld oder ein verschleierter Name, den die Leute später nennen.

wenn Sie dies aus einem nicht python) - Hintergrund betrachten, ist dies möglicherweise der Grund für die größere Verwirrung, da die Notation für das Aufteilen von Arrays nicht intuitiv ist Ihr Bild mit dem Gewichtungsvektor Die Ausgabe ist ein einzelner Skalarwert, der die Position Ihrer ersten Filterausgabematrix einnimmt Stellen Sie sich eine 4 x 4-Matrix vor, die das Summenprodukt jeder dieser Faltungsoperationen über die gesamte Eingabe darstellt Jeder Filter, das gibt dir deine Ausgangslautstärke. In Andrejs Beschreibung beginnt er, sich entlang der x-Achse zu bewegen. Die y-Achse bleibt die gleiche.

Hier ist ein Beispiel dafür, wie V[:,:,0] In Form von Windungen aussehen würde. Denken Sie daran, der dritte Wert unseres Index ist die Tiefe Ihrer Ausgabeebene

[result of convolution 1, result of convolution 2, ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., result of convolution n]

Die Animation ist am besten geeignet, um dies zu verstehen, aber Andrej hat beschlossen, sie durch ein Beispiel zu ersetzen, das nicht der obigen Berechnung entspricht.

Das hat eine Weile gedauert. Zum Teil, weil numpy nicht so indiziert wie Andrej in seinem Beispiel, zumindest habe ich nicht damit herumgespielt. Es gibt auch einige Annahmen, dass die Gesamtproduktoperation klar ist. Dies ist der Schlüssel, um zu verstehen, wie Ihre Ausgabeebene erstellt wird, was jeder Wert darstellt und wie tief er ist.

Hoffentlich hilft das!

5
sam_sach

Die Tiefe der CONV-Ebene ist die Anzahl der verwendeten Filter ..__ Die Tiefe eines Filters entspricht der Bildtiefe, die er als Eingabe verwendet.

Zum Beispiel: Nehmen wir an, Sie verwenden ein Bild von 227 * 227 * 3 . Nehmen wir an, Sie verwenden einen Filter der Größe 11 * 11 (Raumgröße) . Dieses 11 * 11-Quadrat wird verschoben Gesamtbild, um ein einzelnes 2-dimensionales Array als Antwort zu erzeugen. Dazu muss es jedoch jeden Aspekt innerhalb des 11 * 11-Bereichs abdecken. Daher ist die Filtertiefe Bildtiefe = 3 ..__ Nehmen wir an, wir haben 96 solcher Filter, die jeweils unterschiedliche Antworten erzeugen. Dies ist die Tiefe der Faltungsschicht. Es ist einfach die Anzahl der verwendeten Filter.

4
Adarsh Maurya

Da das Eingangsvolumen bei einem Bildklassifizierungsproblem N x N x 3 ist. Am Anfang ist es nicht schwer sich vorzustellen, was die Tiefe bedeutet - nur die Anzahl der Kanäle - Red, Green, Blue. Ok, also ist die Bedeutung für die erste Schicht klar. Aber was ist mit den nächsten? So versuche ich, die Idee zu visualisieren.

  1. Auf jeder Ebene wenden wir eine Reihe von Filtern an, die sich um die Eingabe herum falten. Stellen wir uns vor, dass wir uns derzeit auf der ersten Ebene befinden und wir uns um ein Volumen V der Größe N x N x 3 bündeln. Wie @Semih Yagcioglu am Anfang erwähnt, suchen wir nach einigen groben Merkmalen: Kurven, Kanten usw. ... Nehmen wir an, wir verwenden N-Filter gleicher Größe (3x3) mit Schritt 1. Dann sucht jeder dieser Filter nach einem anderen Kurve oder Kante, während sie sich um V windet. Natürlich hat der Filter die gleiche Tiefe, wir möchten nicht nur die Graustufendarstellung, sondern die gesamte Information liefern. 

  2. Wenn nun M Filter nach M verschiedenen Kurven oder Kanten suchen. Und jeder dieser Filter erzeugt eine Merkmalskarte, die aus Skalaren besteht (die Bedeutung des Skalars ist der Filter, der sagt: Die Wahrscheinlichkeit, dass diese Kurve hier ist, ist X%). Wenn wir uns mit dem gleichen Filter um das Volumen winden, erhalten wir diese Karte mit Skalaren, die uns sagt, wo genau wir die Kurve gesehen haben.

  3. Dann kommt das Feature-Map-Stacking. Stellen Sie sich vor, Sie stapeln wie folgt. Wir haben Informationen darüber, wo jeder Filter eine bestimmte Kurve erkannt hat. Schön, wenn wir sie stapeln, erhalten wir Informationen darüber, welche Kurven/Kanten in jedem kleinen Teil unseres Eingangsvolumens verfügbar sind. Und dies ist die Ausgabe unserer ersten Faltungsschicht. 

  4. Die Idee der Nichtlinearität kann unter Berücksichtigung von 3 leicht verstanden werden. Wenn wir die ReLU-Funktion auf eine Feature-Map anwenden, sagen wir: Entfernen Sie alle negativen Wahrscheinlichkeiten für Kurven oder Kanten an dieser Stelle. Und das macht durchaus Sinn.

  5. Die Eingabe für die nächste Ebene ist dann ein Volume $ V_1 $, das Informationen zu verschiedenen Kurven und Kanten an verschiedenen räumlichen Positionen enthält (Denken Sie daran: Jede Ebene trägt Informationen zu einer Kurve oder Kante). 

  6. Dies bedeutet, dass die nächste Ebene durch Kombinieren dieser Kurven und Kanten Informationen zu komplexeren Formen extrahieren kann. Um sie wieder zu kombinieren, sollten die Filter die gleiche Tiefe wie das Eingangsvolumen haben.
  7. Von Zeit zu Zeit wenden wir Pooling an. Die Bedeutung ist genau das Volumen zu verkleinern. Da wir bei Verwendung von Strides = 1 ein Pixel (Neuron) normalerweise zu oft für dasselbe Merkmal betrachten. 

Hoffe das macht Sinn. Sehen Sie sich die erstaunlichen Grafiken des berühmten CS231-Kurses an, um zu prüfen, wie genau die Wahrscheinlichkeit für jedes Feature an einem bestimmten Ort berechnet wird. 

4
StefanL19

Das erste, was Sie beachten müssen, ist 

receptive field of a neuron is 3D 

wenn das Empfangsfeld 5x5 ist, wird das Neuron mit der Anzahl der Punkte von 5x5x (Eingangstiefe) verbunden. Wie auch immer Ihre Eingabetiefe aussehen mag, eine Ebene von Neuronen entwickelt nur eine Ebene der Ausgabe.

 Each neuron is connected to whole depth in receptive field

Nun ist das nächste, was zu beachten ist

depth of output layer = depth of conv. layer

dh das Ausgabevolumen ist unabhängig vom Eingabevolumen und hängt nur von den Anzahl Filtern (Tiefe) ab. Dies sollte aus dem vorherigen Punkt ziemlich offensichtlich sein.

Beachten Sie, dass die Anzahl der Filter (Tiefe der cnn-Schicht) ein Hyperparameter ist. Sie können es nehmen, was Sie möchten, unabhängig von der Bildtiefe. Jeder Filter verfügt über einen eigenen Satz von Gewichtungen, sodass er ein anderes Feature in derselben lokalen Region lernen kann, die vom Filter abgedeckt wird.

2
nithin

Die Tiefe des Netzwerks ist die Anzahl der Schichten im Netzwerk. Bei Krizhevsky beträgt die Tiefe 9 Schichten (modulo ein Zaunpfostenproblem, wie die Schichten gezählt werden?). Architecutre of the Krizhevsky et al CNN

1
user3450049

In einfachen Worten kann es wie folgt erklären: 

Nehmen wir an, Sie haben 10 Filter wobei jeder Filter die Größe von 5x5x3 hat. Was bedeutet das? Die Tiefe dieser Schicht ist 10 , was der Anzahl der Filter entspricht. Die Größe jedes Filters kann wie gewünscht definiert werden, z. B. 5 × 5 × 3 in diesem Fall, wobei 3 die Tiefe der vorherigen Schicht ist. Um genau zu sein, sollte die Tiefe jedes Filers in der nächsten Ebene 10 (nxnx10) betragen, wobei n wie 5 oder etwas anderes definiert werden kann. Hoffnung wird alles klar machen. 

0
GPrathap