[PYTHON] Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell

1. Zuallererst

Ich fragte mich, wie ich die Parameter des tiefen Lernens zählen sollte, und berechnete sie, um mein Verständnis zu bestätigen.

2. Modellkonfiguration

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.

スクリーンショット 2020-03-15 15.13.37.png

Implementierung

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
_________________________________________________________________

3. Berechnung der Anzahl der Parameter

3-1. CNN-Schicht

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.

3-2. Ebene abflachen

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.

3-3. Dichte Schicht (versteckte Schicht)

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

4. Zusammenfassung

Ü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

Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell
Diagramm der Geschichte der Anzahl der Ebenen des tiefen Lernens und der Änderung der Genauigkeit
Zählen Sie die Anzahl der Zeichen im Text in der Zwischenablage auf dem Mac
[Homologie] Zählen Sie mit Python die Anzahl der Löcher in den Daten
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Zählen / überprüfen Sie die Anzahl der Methodenaufrufe.
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (3)
Bedeutung von Deep-Learning-Modellen und -Parametern
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Visualisieren Sie die Auswirkungen von Deep Learning / Regularisierung
Zählen Sie die Anzahl der Zeichen mit Echo
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (2)
Die Geschichte des tiefen Lernens mit TPU
Finden Sie die Anzahl der Tage in einem Monat
Implementierung eines Deep Learning-Modells zur Bilderkennung
Deep Learning 1 Übung des Deep Learning
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
So installieren Sie das Deep Learning Framework Tensorflow 1.0 in der Windows Anaconda-Umgebung
Geben Sie das Beleuchtungsmodell für SCN-Material in Pythonista an
So ermitteln Sie die Anzahl der Stellen in Python
Über das Testen bei der Implementierung von Modellen für maschinelles Lernen
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Techniken zum Verständnis der Grundlagen von Deep-Learning-Entscheidungen
Untersuchen Sie die Parameter von RandomForestClassifier im Kaggle / Titanic-Tutorial
Othello ~ Aus der dritten Zeile von "Implementation Deep Learning" (4) [Ende]
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
10. Zählen der Anzahl der Zeilen
Deep Running 2 Tuning von Deep Learning
Holen Sie sich die Anzahl der Ziffern
Berechnen Sie die Anzahl der Änderungen
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
So finden Sie die optimale Anzahl von Clustern für k-means
Maya | Ermitteln Sie die Anzahl der Polygone im ausgewählten Objekt
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Untersuchen Sie den Fehlerbereich bei der Anzahl der Todesfälle aufgrund einer Lungenentzündung
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
Ermitteln Sie die Anzahl der Vorkommen für jedes Element in der Liste
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
Deep Learning Model Lightening Library Distiller
[Pytorch] Ich möchte die Trainingsparameter des Modells manuell zuweisen
Holen Sie sich die Anzahl der Ansichten von Qiita
Die Geschichte der Teilnahme an AtCoder
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex5 (Anpassung der Regularisierungsparameter)
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
MySQL-automatische Escape-Funktion von Parametern in Python
Berechnung der Anzahl der Assoziationen von Klamer
Python-Simulation des Epidemiemodells (Kermack-McKendrick-Modell)
Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren
Die Geschichte des "Lochs" in der Akte
Echtzeitklassifizierung mehrerer Objekte in Kamerabildern mit tiefem Erlernen von Raspberry Pi 3 B + & PyTorch
Holen Sie sich die Anzahl der Youtube-Abonnenten
Deep Learning Bilderkennung 2 Modellimplementierung
[Erkennung von Anomalien] Versuchen Sie es mit der neuesten Methode des Fernunterrichts