Ich fragte mich, wie ich die Parameter des tiefen Lernens zählen sollte, und berechnete sie, um mein Verständnis zu bestätigen.
Lassen Sie uns das Modell mit Keras konfigurieren. Das diesmal erstellte Modell ist ein Modell, das ein RBG-Bild mit 256 x 256 als Eingabe verwendet und es in 9 Kategorien klassifiziert.
Importieren Sie die erforderlichen Module.
from keras.models import Sequential
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten, Dropout
from keras.layers.core import Dense
Definieren Sie die Anzahl der Klassen, die als Konstante klassifiziert werden sollen
num_class = 9
Konfigurieren Sie das Modell.
#Modell erstellen
model = Sequential()
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(3, 3)))
model.add(Dropout(0.5))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu'))
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten()) #Flatten()Konvertieren Sie die Feature-Map in einen Vektor von
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_class, activation='softmax')) #Ausgabe als 9 Genauigkeitsklassen mit Softmax-Funktion
Gibt Modellinformationen aus.
model.summary() #Modellinformationen anzeigen
Sie erhalten folgende Ausgabe: Die Anzahl der Parameter wird ganz rechts davon ausgegeben. In diesem Modell werden 6.029.097 Parameter durch Training angepasst.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
Schauen wir uns zunächst die CNN-Schicht der ersten Schicht an. Die Anzahl der Filter: 32, Filtergröße: 3x3, Eingangskanal: 3 (RGB), Ausgangskanal: 3 sind angegeben.
model.add(Conv2D(32, kernel_size=3, padding="same", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
Die Anzahl der Parameter kann nach folgender Formel berechnet werden. Anzahl der Parameter = Vertikale Filtergröße x Horizontale Filtergröße x Anzahl der Eingangskanäle x Anzahl der Ausgangskanäle + Vorspannung x Anzahl der Ausgangskanäle param =3 x 3 x 3 x 32 + 1 x 32 = 896
Berechnen wir die zweite Ebene auf die gleiche Weise.
model.add(Conv2D(32, kernel_size=3, padding="valid", activation='relu', input_shape=(256, 256, 3)))
=================================================================
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
Diesmal beträgt der Eingang zur zweiten Schicht also 32 Kanäle
Anzahl der Parameter = Vertikale Filtergröße x Horizontale Filtergröße x Anzahl der Eingangskanäle x Anzahl der Ausgangskanäle + Vorspannung x Anzahl der Ausgangskanäle param =3 x 3 x 32 x 32 + 1 x 32 = 9248
Die 3., 4., 5. und 6. Conv2D-Ebene können auf die gleiche Weise berechnet werden.
Die Feature-Map ist vektorisiert. Es wird in eine Dimension verschoben. Es ist kein Parameter, der durch Lernen hier angepasst wird.
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
Die Dimension des Vektors beträgt 19 x 19 x 32 = 11552.
In der Ebene "Dicht" neben der Ebene "Reduzieren", die die Features vektorisiert Weil die Anzahl der Parameter = Eingangsgröße x Ausgangsgröße + Bias param = 11552 x 512 + 512 = 5915136
Die nächste versteckte Ebene ist dieselbe dense_2 (Dense) param = 512 x 128 + 512 = 65664 dense_3 (Dense) param = 128 x 9 + 9 = 1161
Überprüfen Sie das Modell, das Sie erneut erstellt haben. Wenn Sie den Wert von Param ganz rechts hinzufügen, wird er zu 6.029.097. Dieser Parameter wurde im Training angepasst. Dann werden die durch Training angepassten Parameter Teil des Modells, und folglich werden diese Parameter verwendet und berechnet, sofern das Modell nicht leichter gemacht wird.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 256, 256, 32) 896
_________________________________________________________________
conv2d_2 (Conv2D) (None, 254, 254, 32) 9248
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 84, 84, 32) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 84, 84, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 84, 84, 32) 9248
_________________________________________________________________
conv2d_4 (Conv2D) (None, 82, 82, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 41, 41, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 41, 41, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 41, 41, 32) 9248
_________________________________________________________________
conv2d_6 (Conv2D) (None, 39, 39, 32) 9248
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 19, 19, 32) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 19, 19, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 11552) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 5915136
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 65664
_________________________________________________________________
dropout_5 (Dropout) (None, 128) 0
_________________________________________________________________
dense_3 (Dense) (None, 9) 1161
=================================================================
Total params: 6,029,097
Trainable params: 6,029,097
Non-trainable params: 0
_________________________________________________________________
Recommended Posts