2017-06-17 4 views
1

Mein cnn-Modell, das mit Keras 1.1.1 erstellt wird, hat zwei Faltungspooling-Schichten, gefolgt von zwei dichten Schichten, und Dropout wird nach der zweiten Faltungspooling-Schicht und der ersten dichten Schicht hinzugefügt. Die Codes sind wie folgt:Keras CNN-Modellparameterberechnung

model = Sequential() 
#convolution-pooling layers 
model.add(Convolution2D(32, 5, 5, input_shape=input_shape)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Convolution2D(64, 5, 5)) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Dropout(0.25)) 
#dense layers 
model.add(Flatten()) 
model.add(Dense(100)) 
model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add((Dense(2))) 
model.add(Activation('softmax')) 
#optimizer 
sgd = SGD(lr=1e-3, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='categorical_crossentropy', 
       optimizer = sgd, 
       metrics=['accuracy']) 
print model.summary() 

Das Modell Zusammenfassung der Tabelle gibt wie folgt:

enter image description here

Ich bin nicht klar, wie sich die Anzahl der Parameter der zweiten Faltungsschicht (dh 51264 angezeigt durch das rote Rechteck) wird berechnet. Ich dachte, die Nummer wäre (5 * 5 + 1) * 64 = 1664, da der Convolution-Kernel 5 * 5 groß ist und 64 Feature-Maps extrahiert werden müssen.

Außerdem habe ich bereits Dropout implementiert. Warum spiegelt die Parametertabelle diesen Punkt nicht wider? Es scheint, dass die Parameternummer ohne Dropout angegeben ist, obwohl das Dropout (Layer) in der Tabelle aufgeführt ist. Kann mir jemand helfen, die Parameterübersicht zu interpretieren?

+0

In Bezug auf Dropout: Dies deaktiviert zufällig Neuronen während des Trainings. Sie sind immer noch in Ihrem Modell vorhanden und werden daher nicht von der Anzahl der Params in Ihrer Modellzusammenfassung abgezogen. – petezurich

+0

Ich denke, du hast Recht – jingweimo

Antwort

3

Es ist eine ziemlich einfache Berechnung mit Grundkonzept. Und indem ich Ihren Code und die Modellzusammenfassung ansah, waren dies meine Schritte.

Schritt 1: Formel Parameter zu berechnen

total_params =
(filter_height * filter_width * input_image_channels + 1) * number_of_filters

Schritt 2: berechnen Parameter für erste Schicht

mit imput Bildkanäle 10

filter_height = 5,
filter_weight = 5,
input_image_channels = 1
number_of_filters = 32
Obwohl Sie gab uns haben, aber ich dachte, es aus, indem Sie Ihre Parameter Wert.

Jetzt werden wir die Anzahl der Parameter für die erste Conv-Schicht berechnen.

total_param = (5 * 5 * 1 + 1) * 32 = 832

Schritt 3: Ebenso kann man für die 2. Schicht CONV berechnen. Beachten Sie, dass die Anzahl der Filter der vorherigen Ebene die Anzahl der Kanäle für das Eingangsbild der aktuellen Ebene ist.

filter_height = 5,
filter_weight = 5,
input_image_channels = 32
number_of_filters = 64

Jetzt werden wir die Anzahl der Parameter für die 2. konv Schicht berechnen.

total_param = (5 * 5 * 32 + 1) * 64 = 51264

+1

Danke! Das macht Sinn – jingweimo

+0

hey @jingweimo, wenn meine Antwort Sinn machen können Sie bitte akzeptieren Sie es. – blitu12345

2

Was den zweiten Teil der Frage:

Die Dropout-Schicht deaktiviert zufällig Neuronen während des Trainings. Sie sind immer noch in Ihrem Modell vorhanden und werden daher nicht von der Anzahl der Parameter in Ihrer Modellzusammenfassung abgezogen.