[PYTHON] Fordern Sie die Bildklassifizierung mit TensorFlow2 + Keras CNN 1 heraus ~ Bewegen Sie sich vorerst ~

Einführung

Dies ist ein Studienmemo zur Bildklassifizierung durch TensorFlow2 + Keras (das erste von ** CNN </ font> **). Informationen zur MLP-Edition (Multi-Layer-Perceptron-Modell-Edition) finden Sie unter hier.

Darüber hinaus ist das Thema die Klassifizierung von ** handgeschriebenen numerischen Bildern (MNIST) **, die ein Standard ist.

Dieses Mal trainieren wir das CNN-Modell vorerst und verwenden es zur Vorhersage (Klassifizierung), während wir die Black Box beibehalten.

MLP-Versionsprogramm

Mit TensorFlow2 + Keras kann die MNIST-Klassifizierung (Handwritten Number Image) nach ** mehrschichtigem Perzeptronmodell ** wie folgt geschrieben werden (Details). items / 7d3c7bd3327ff049243a)).

Wechseln Sie zu TensorFlow2 (Google Colab.Nur Umwelt)


%tensorflow_version 2.x

Bildklassifizierung durch MLP


import tensorflow as tf

# (1)Laden Sie einen Datensatz handgeschriebener numerischer Bilder herunter und normalisieren Sie ihn
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# (2)MLP-Modell erstellen
model = tf.keras.models.Sequential()
model.add( tf.keras.layers.Flatten(input_shape=(28, 28)) )
model.add( tf.keras.layers.Dense(128, activation='relu') )
model.add( tf.keras.layers.Dropout(0.2) )
model.add( tf.keras.layers.Dense(10, activation='softmax') )

# (3)Modellzusammenstellungstraining
model.compile(optimizer='Adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

# (4)Modellbewertung
model.evaluate(x_test,  y_test, verbose=2)

Auf diese Weise konnte ich einen Klassifikator mit einer korrekten Antwortrate von ca. 97,7 $ % </ font> erstellen.

CNN-Version des Programms

Die Klassifizierung des handgeschriebenen numerischen Bildes (MNIST) nach ** Convolution Neural Network Model (CNN) ** kann wie folgt geschrieben werden. Sie können daraus ein Faltungsmodell für neuronale Netze machen, indem Sie dem mehrschichtigen Perceptron-Modell nur drei Zeilen hinzufügen.

Bildklassifizierung durch CNN


# (1)Laden Sie einen Datensatz handgeschriebener numerischer Bilder herunter und normalisieren Sie ihn
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

# (2)Erstellen Sie ein CNN-Modell
model = tf.keras.models.Sequential()
model.add( tf.keras.layers.Reshape((28, 28, 1), input_shape=(28, 28)) ) #hinzufügen
model.add( tf.keras.layers.Conv2D(32, (5, 5), activation='relu') )      #hinzufügen
model.add( tf.keras.layers.MaxPooling2D(pool_size=(2,2)) )              #hinzufügen
model.add( tf.keras.layers.Flatten() )                                  #Änderung
model.add( tf.keras.layers.Dense(128, activation='relu') )
model.add( tf.keras.layers.Dropout(0.2) )
model.add( tf.keras.layers.Dense(10, activation='softmax') )

# (3)Modellzusammenstellungstraining
model.compile(optimizer='Adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)

# (4)Modellbewertung
model.evaluate(x_test,  y_test, verbose=2)

Auf diese Weise können Sie einen -Klassifikator mit einer korrekten Antwortrate von ca. 98,7 % $ </ font> erstellen (ein Modell mit einer korrekten Antwortrate von ca. 1 $% höher als der oben genannte MLP). Kann gemacht werden). Die Lernzeit ist jedoch länger.

Fälle, die nicht richtig vorhergesagt werden konnten

Schauen wir uns einen speziellen Fall an, in dem die Klassifizierung (Vorhersage) fehlschlägt. /qiita.com/code0327/items/5dfc1b2ed143c1f9bd2b) ").

Die roten Buchstaben oben links in jeder Abbildung geben Auskunft darüber, ** welche Zahl fälschlicherweise vorhergesagt wurde ** (die Zahl in Klammern ist die Softmax-Ausgabe für die falsche Vorhersage). Zum Beispiel bedeutet 5 (0.9) </ font> "Ich habe $ 5 $ mit einem Vertrauen von $ 90 % $ vorhergesagt". Außerdem ist blaue Nummer </ font> die Indexnummer der Testdaten test_x.

4/980 Fälle, in denen der richtige Antwortwert "0" nicht richtig vorhergesagt (klassifiziert) werden konnte

0.png

Fälle, in denen der richtige Antwortwert "1" nicht korrekt vorhergesagt (klassifiziert) werden konnte 4/1135 Fälle

1.png

8/1032 Fälle, in denen der richtige Antwortwert "2" nicht richtig vorhergesagt (klassifiziert) werden konnte

2.png

Fälle, in denen der richtige Antwortwert "3" nicht richtig vorhergesagt (klassifiziert) werden konnte 12/10 10 Fälle

3.png

Fälle, in denen der richtige Antwortwert "4" nicht korrekt vorhergesagt (klassifiziert) werden konnte 15/982 Fälle

4.png

6/892 Fälle, in denen der richtige Antwortwert "5" nicht richtig vorhergesagt (klassifiziert) werden konnte

5.png

13/958 Fälle, in denen der richtige Antwortwert "6" nicht richtig vorhergesagt (klassifiziert) werden konnte

6.png

Fälle, in denen der richtige Antwortwert "7" nicht korrekt vorhergesagt (klassifiziert) werden konnte 15/1028 Fälle

7.png

27/974 Fälle, in denen der richtige Antwortwert "8" nicht richtig vorhergesagt (klassifiziert) werden konnte

8.png

26/1009 Fälle, in denen der richtige Antwortwert "9" nicht richtig vorhergesagt (klassifiziert) werden konnte

9.png

nächstes Mal

Warum ist das ** Convolutional Neural Network Model (CNN) ** für die Bildklassifizierung und Bilderkennung geeignet? Was ist Faltung (Filter) überhaupt? Ich möchte den Inhalt wie aufgreifen.

Recommended Posts