[PYTHON] Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes

Grundsätzlich lernen mit Keras und Python

Was ich gelernt habe

  1. Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter der Ebene
  2. Verstehen Sie die Datenverarbeitung nach der Verarbeitung der Faltungsschicht und der Poolschicht

Code zum Lernen verwendet

Code für mnist cnn in der Keras-Dokumentation.

from __future__ import print_function
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D, MaxPooling2D
from keras import backend as K

batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

Was war die Frage

Am fraglichsten ist die Anzahl der Eingabe- / Ausgabedimensionen. Das Ergebnis von model.summary wird unten ausgegeben. Es gibt zwei Dinge, die ich mich hier gefragt habe.

  1. "Mnist-Daten sind 28 * 28 Bilddaten, aber woher kommt die erste Schicht 26, 26, 32?"
  2. "Was ist Conv2D 32?"
Model: "sequential_2"


_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_3 (Conv2D)            (None, 26, 26, 32)        320       
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 24, 24, 64)        18496     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 12, 12, 64)        0         
_________________________________________________________________
dropout_3 (Dropout)          (None, 12, 12, 64)        0         
_________________________________________________________________
flatten_2 (Flatten)          (None, 9216)              0         
_________________________________________________________________
dense_3 (Dense)              (None, 128)               1179776   
_________________________________________________________________
dropout_4 (Dropout)          (None, 128)               0         
_________________________________________________________________
dense_4 (Dense)              (None, 10)                1290      
=================================================================
Total params: 1,199,882
Trainable params: 1,199,882
Non-trainable params: 0

Was ich fand

32 der Conv2D-Funktion gibt die Anzahl der Filter an. Mit anderen Worten werden verschiedene Kantenextraktionen unter Verwendung von 32 Filtertypen durchgeführt. Durch Ausführen der Filterberechnung als Schritt 1 wird das Bild um eine Größe verkleinert und das Bild in vertikaler und horizontaler Richtung um jeweils 2 Punkte verkleinert. Da es für jeden Filter einen Ausgang gibt, gibt es 32 Ausgänge. Im Gegensatz zur Faltschicht verarbeitet die Poolschicht keine überlappenden Punkte, so dass die Anzahl der Ausgaben stark reduziert wird. (Abgesehen davon ändert sich die Anzahl der Ein- und Ausgänge nicht, da die Dropout-Ebene nur den Wert auf 0 setzt.)

Überprüfen Sie als nächstes

  1. Der spezifische Wert des Filters. Visualisierung

Recommended Posts

Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Berühren Sie das Objekt des neuronalen Netzes
Erstellen Sie mithilfe des TensorFlow-Faltungsnetzwerks einen Klassifikator mit einer Handschrifterkennungsrate von 99,2%
Finden Sie die Anzahl der Tage in einem Monat
Ausgabe in Form eines Python-Arrays
[NNabla] So erhalten Sie die Ausgabe (Variable) der mittleren Schicht des erstellten Netzwerks
[Python] Ein Programm, das die Anzahl der Täler zählt
Ein Memorandum über Warnungen in Pylint-Ausgabeergebnissen
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
Implementieren Sie das Convolutional Neural Network
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
Geben Sie das Ausgabeergebnis von sklearn.metrics.classification_report als CSV-Datei aus
Verstehen Sie die Anzahl der Eingabe- / Ausgabeparameter des Faltungs-Neuronalen Netzes
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Mit ein wenig Präzision wurden die Gewichtsparameter unglaublich reduziert ~ Überraschende Ergebnisse von CNN ~
So zeichnen Sie einfach die Struktur eines neuronalen Netzwerks in Google Colaboratory mit "convnet-drawer"
Ich habe ein Convolutional Neural Network (CNN) mit einem TensorFlow-Tutorial zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Aufbau eines neuronalen Netzwerks, das XOR durch Z3 reproduziert
CNN Acceleration Series ~ FCNN: Einführung des Fourier Convolutional Neural Network ~
Implementieren Sie ein dreischichtiges neuronales Netzwerk
10. Zählen der Anzahl der Zeilen
Holen Sie sich die Anzahl der Ziffern
Berechnen Sie die Anzahl der Änderungen
4. Kreisparameter mit einem neuronalen Netzwerk!
Filtern Sie die Ausgabe von tracemalloc
Fassen wir die Grundfunktionen von TensorFlow zusammen, indem wir ein neuronales Netzwerk erstellen, das XOR-Gatter lernt.
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
Django: Variiert die Anzahl der untergeordneten Formulare in Abhängigkeit von der Anzahl der Eingabeelemente
So geben Sie das Ausgabeergebnis des Linux-Befehls man in eine Datei aus
Ein Befehl zum einfachen Überprüfen der Netzwerkgeschwindigkeit auf der Konsole
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
[NNabla] So entfernen Sie die mittlere Ebene eines vorgefertigten Netzwerks
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Holen Sie sich die Anzahl der Ansichten von Qiita
Verstehen Sie den Inhalt der sklearn-Pipeline
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Holen Sie sich die Anzahl der Youtube-Abonnenten
Die Geschichte des Exportierens eines Programms
[Python] Ein Programm, das die Anzahl der Schokoladensegmente berechnet, die die Bedingungen erfüllen
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Generieren Sie eine Liste mit der Anzahl der Tage im aktuellen Monat.
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
So setzen Sie eine Zeilennummer am Anfang einer CSV-Datei
So spielen Sie ein Video ab, während Sie die Anzahl der Bilder ansehen (Mac)
Erstellt ein Bildunterscheidungsmodell (cifar10) unter Verwendung eines Faltungs-Neuronalen Netzwerks
Wir haben die Auswirkung der Änderung der Parameter des mehrschichtigen neuronalen Netzwerks (Keras) auf den Wert der Verlustfunktion bewertet (Betreff: MNIST-Klassifizierung).
Das Ergebnis war besser, als die Trainingsdaten des Mini-Batches als Hybrid aus fest und zufällig mit einem neuronalen Netzwerk erstellt wurden.
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).