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.
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.
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.
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
.
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