Ceci est un mémo d'étude pour la classification d'images par TensorFlow2 + Keras (le premier de ** CNN </ font> **). Pour l'édition MLP (édition du modèle Perceptron multicouche), veuillez consulter ici.
De plus, le sujet est la classification de ** l'image numérique manuscrite (MNIST) ** qui est une norme.
Cette fois, entraînons le modèle CNN pour le moment et utilisons-le pour la prédiction (classification) tout en gardant la boîte noire.
En utilisant TensorFlow2 + Keras, la classification de l'image numérique manuscrite (MNIST) par ** modèle de perceptron multicouche ** pourrait être écrite comme suit (Détails éléments / 7d3c7bd3327ff049243a)).
Passer à TensorFlow2 (Google Colab.Environnement uniquement)
%tensorflow_version 2.x
Classification des images par MLP
import tensorflow as tf
# (1)Télécharger et normaliser un ensemble de données d'images numériques manuscrites
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)Construire un modèle MLP
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)Formation à la compilation de modèles
model.compile(optimizer='Adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
# (4)Évaluation du modèle
model.evaluate(x_test, y_test, verbose=2)
En faisant cela, j'ai pu créer un classificateur avec un taux de réponse correct d'environ 97,7 $ % $ </ font>.
La classification des images numériques manuscrites (MNIST) par ** Convolution Neural Network Model (CNN) ** peut être écrite comme suit. Vous pouvez en faire un modèle de réseau de neurones convolutif en ajoutant seulement trois lignes au modèle Perceptron multicouche.
Classification des images par CNN
# (1)Télécharger et normaliser un ensemble de données d'images numériques manuscrites
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)Construire un modèle CNN
model = tf.keras.models.Sequential()
model.add( tf.keras.layers.Reshape((28, 28, 1), input_shape=(28, 28)) ) #ajouter à
model.add( tf.keras.layers.Conv2D(32, (5, 5), activation='relu') ) #ajouter à
model.add( tf.keras.layers.MaxPooling2D(pool_size=(2,2)) ) #ajouter à
model.add( tf.keras.layers.Flatten() ) #Modification
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)Formation à la compilation de modèles
model.compile(optimizer='Adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
# (4)Évaluation du modèle
model.evaluate(x_test, y_test, verbose=2)
En faisant cela, vous pouvez créer un classificateur avec un taux de réponse correcte d'environ 98,7 $ % $ </ font> (un modèle avec un taux de réponse correcte d'environ 1 $ % $ supérieur au MLP ci-dessus). Peut être fait). Cependant, le temps d'apprentissage est plus long.
Examinons un cas spécifique où la classification (prédiction) échoue ** (Le programme de sortie est "[~ Observez l'image qui ne parvient pas à classer ~](https: / /qiita.com/code0327/items/5dfc1b2ed143c1f9bd2b) ").
Les lettres rouges affichées dans le coin supérieur gauche de chaque figure sont les informations ** sur le nombre prédit par erreur ** (le nombre entre parenthèses est la sortie softmax pour la mauvaise prédiction). Par exemple, 5 (0.9) </ font> signifie "J'ai prédit 5 $ avec une confiance d'environ 90 $ % $". De plus, blue number </ font> est le numéro d'index des données de test test_x
.
Pourquoi le ** modèle de réseau neuronal convolutif (CNN) ** convient-il à la classification et à la reconnaissance d'images? Qu'est-ce que la convolution (filtre) en premier lieu? Je voudrais reprendre les contenus tels que.
Recommended Posts