2016-12-12 6 views
0

Ich bin auf this tutorial auf Keras, um eine grundlegende Conv-Net zu trainieren. Ich finde ein paar Dinge verwirrend, und die Keras-Dokumentation geht auch nicht sehr detailliert.Keras Modellstruktur Fragen

Blick Lassen Sie uns bei den ersten paar Schichten des Netzwerks:

model = Sequential() 

model.add(Convolution2D(32, 3, 3, activation='relu', input_shape=(1,28,28))) 
model.add(Convolution2D(32, 3, 3, activation='relu')) 
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Dropout(0.25)) 

Meine Fragen:

  1. Das Tutorial beschreibt die erste Schicht als „Eingangsschicht“. Die erste Zeile enthält jedoch eine Convolution2D-Funktion mit einem input_shape. Habe ich richtig angenommen, dass dies tatsächlich die erste versteckte Schicht (eine Faltungsschicht) ist, anstatt nur die Eingabe Schicht? Grund ist, dass wir keine separate model.add() Anweisung nur für die Eingabe benötigen? In der Funktion Convolution2D() verwenden wir 32 Filter, wobei jeder Filter 3x3 Pixel groß ist Nach meinem Verständnis ist ein Filter ein kleiner Pixelblock, der über das Bild "scannt". Benötigen wir also für ein 28x28-Bild nicht 676 Filter (26 * 26, da jeder Filter 3x3 ist)? Was bedeutet die 32 hier?
  2. Die letzte Zeile ist eine Dropout-Ebene. Aus meiner Sicht ist Dropout eine Regularisierungstechnik und wird auf das gesamte Netzwerk angewendet. Also gilt die Dropout(0.25) hier ein 25% Dropout nur auf die vorherige Ebene? Oder gilt es für alle davor liegenden Schichten?

Danke.

+0

Im not gonna Post eine Antwort, wie es so unvollständig wäre: 1. ja, die „Eingangsschicht“ ist in der Tat nur eine passive Schicht, die nur die Eingangsdaten in der ersten verborgenen Schicht 3 passieren. Es gilt nur für die vorherige Ebene (in der Tat die aktuelle Ebene, bis Sie eine weitere im sequenziellen Modell hinzufügen), aber nicht alle Ebenen können ein Dropout aufweisen. Convolutional Layer haben keine anderen Regularisierungstechniken. Dichte Dropout, Wiederkehrende auch, aber mit einer anderen Syntax (Schlüsselwörter Argumente). – Gaarv

Antwort

0
  1. Jedes Mal, wenn Sie anrufen model.fit(), Sie sind das Bestehen der 28 * 28 Bild. Das ist also die Eingabe für das Modell. Zusätzlich zu dieser Eingabe führen wir Faltung durch, um Feature-Maps zu generieren.

  2. Faltung bedeutet Matrixmultiplikation. Also ist die Ausgabe eines einzelnen Filters in der ersten Schicht 26 * 26 Matrix. Wir haben solche 32 Matrizen. Das ist was 32 bedeutet. Überprüfen Sie dies für weitere Erläuterungen. https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

  3. Dies gilt Abbruch mit Wahrscheinlichkeit 0,25 auf die Ebene vor dem Satz.

+0

Danke für die Antwort, aber in Bezug auf 3, wurde mir von anderen gesagt, dass Dropout für die vorherige Schicht gilt, nicht für die folgende? In diesem Fall gilt der 0.25-Dropout für die MaxPool-Ebene. Ist das richtig? – AdmiralWen

+0

Sie haben Recht. Ich hatte den Quellcode falsch interpretiert. Lass mich die Antwort korrigieren –