[PYTHON] CNN (1) zur Bildklassifizierung (für Anfänger)

Obwohl es in der Praxis nicht gehandhabt wird, wird es als Lernen aufgezeichnet. Diesmal ist das Convolutional Neural Network (CNN) Es scheint für die Bilderkennungsanalyse effektiv zu sein ...

CNN Der Punkt ist, dass es zusätzlich zum normalen neuronalen Netzwerk eine Faltungsschicht und eine Poolschicht gibt.

Falten

Der wichtigste Teil beim Konvertieren von Features in Daten aus Bildern. Bilddaten sind 5x5x1 Daten. Stellen Sie die Gewichtung im 3x3x3-Kernel ein und berechnen Sie alle Muster. 9 Muster in der Abbildung unten. Das Ergebnis wird als Feature-Map bezeichnet. スクリーンショット 2020-01-31 8.35.35.png

Pooling

Pooling ist eine Methode, um ein großes Bild zu verkleinern und gleichzeitig wichtige Informationen zu hinterlassen. Infolgedessen kann die Dimension der Daten verringert werden, die Berechnungsgeschwindigkeit kann unterdrückt werden und das Lernen kann fortgesetzt werden. スクリーンショット 2020-01-31 8.56.07.png Es gibt zwei Arten ・ Max Pooling → Legen Sie den Maximalwert im Kernel fest ・ Durchschnittliches Pooling → Berechnen Sie den Durchschnittswert aller Zahlen im Kernel

Spezifische Reduzierung der Datendimension (= Komprimierungsmethode)

Durch das Falten wird die Anzahl der Dimensionen reduziert (= komprimiert), indem die Bilddaten innerhalb der Größe des Kernels berechnet und eine neue Feature-Menge extrahiert werden. Die Formel lautet wie folgt. スクリーンショット 2020-03-08 16.15.06.png Durch das Pooling werden die Daten komprimiert, während die Funktionen hervorgehoben werden. Die Methode besteht darin, den Maximalwert im Kernel oder den Durchschnittswert zu berechnen.

Bewegen Sie die Probe

Verwenden Sie den MNIST-Datensatz.

%matplotlib inline
import keras
from keras.datasets import mnist
import matplotlib.pyplot as plt

#Daten lesen. Unterteilt in Trainingsdaten und Trainingsdaten
(x_train, y_train), (x_test, y_test) = mnist.load_data()

#Anzeige von MNIST-Daten
fig = plt.figure(figsize=(9, 9))
fig.subplots_adjust(left=0, right=1, bottom=0, top=0.5, hspace=0.05, wspace=0.05)
for i in range(81):
    ax = fig.add_subplot(9, 9, i + 1, xticks=[], yticks=[])
    ax.imshow(x_train[i].reshape((28, 28)), cmap='gray')

Es kommt so heraus. スクリーンショット 2020-04-16 8.29.36.png


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
img_rows, img_cols = 28, 28

(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')

y_train = y_train.astype('int32')
y_test = y_test.astype('int32')
y_train = keras.utils.np_utils.to_categorical(y_train, num_classes)
y_test =  keras.utils.np_utils.to_categorical(y_test, num_classes)

#Der Teil, der vom Falten zum Poolen geht
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))

Zusammenfassung

Das konzeptionelle Bild wurde organisiert.

Referenz

Mechanismus des Faltungsnetzwerks (https://postd.cc/how-do-convolutional-neural-networks-work/) [Was ist ein Faltungsnetzwerk, das häufig in der Bildverarbeitung verwendet wird] (https://kenyu-life.com/2019/03/07/convolutional_neural_network/)

Recommended Posts

CNN (1) zur Bildklassifizierung (für Anfänger)
Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras CNN 1 heraus ~ Bewegen Sie sich vorerst ~
Grundprinzipien der Bilderkennungstechnologie (für Anfänger)
Spacemacs-Einstellungen (für Anfänger)
Python Lehrbuch für Anfänger
Grundlagen der CNN 1-Bilderkennung
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
Ungefähre Suche nach dem nächsten Nachbarn für eine ähnliche Bildanalyse (für Anfänger) (1)
[PyTorch] Bildklassifizierung von CIFAR-10
Ich habe die Bildklassifizierung von AutoGluon ausprobiert
Lernablauf für Python-Anfänger
[Für Anfänger] Kaggle-Übung (Merucari)
Empfohlene Linux-Distribution für Anfänger
ROC-Kurve für die Klassifizierung mehrerer Klassen
Python3-Umgebungskonstruktion (für Anfänger)
Anwendung der CNN2-Bilderkennung
Übersicht über Docker (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Seaborn Basics für Anfänger ④ Pairplot
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Kaggle-Anfänger] Titanic (LightGBM)
Linux Command Memorandum [für Anfänger]
[Python] Zugreifen auf und Zuschneiden von Bildpixeln mit OpenCV (für Anfänger)
Praktische Linux-Verknüpfung (für Anfänger)
Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 1-Move vorerst heraus.
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Pandas Grundlagen für Anfänger ① Lesen & Verarbeiten
TensorFlow MNIST Für ML Anfänger Übersetzung
Entscheidungsbaum (für Anfänger) -Code Edition-
Pandas Grundlagen für Anfänger ⑧ Ziffernverarbeitung
Python-Übungen für Anfänger # 2 [für Anweisung / while-Anweisung]
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Seaborn Grundlagen für Anfänger ② Histogramm (Distplot)
[Für Anfänger] Django -Entwicklungsumgebung Bau-
[Für Anfänger] Skript innerhalb von 10 Zeilen (1.folium)
Logistic Return (für Anfänger) -Code Edition-
Was ist Schaben? [Zusammenfassung für Anfänger]
Persönliche Notizen für die Python-Bildverarbeitung
Python #index für Super-Anfänger, Slices
Empfohlenes Container-Image für Python-Anwendungen
Bildklassifizierung mit Weitwinkel-Fundusbilddatensatz
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
TensorFlow Tutorial MNIST Für ML-Anfänger
Häufig verwendete Linux-Befehle (für Anfänger)
[Muss für Anfänger] Grundlagen von Linux
Python #len Funktion für Super-Anfänger
Web Scraping für Anfänger in Python (1)
Spracherkennung: Genreklassifizierung Part2-Musikgenreklassifizierung CNN
Führen Sie unittest in Python aus (für Anfänger)
Was ist xg boost (1) (für Anfänger)
Web Scraping für Anfänger in Python (4) -1
Python #Hello World für Super-Anfänger