[PYTHON] Défiez la classification des images avec TensorFlow2 + Keras CNN 1 ~ Bougez pour le moment ~

introduction

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.

Programme de version MLP

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

Version CNN du programme

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.

Cas qui n'ont pas pu être prédits correctement

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.

4/980 cas où la valeur de réponse correcte «0» n'a pas pu être prédite (classée) correctement

0.png

Cas où la valeur de réponse correcte «1» n'a pas pu être prédite (classée) correctement 4/1135 cas

1.png

8/1032 cas où la valeur de réponse correcte «2» n'a pas pu être prédite (classée) correctement

2.png

Cas où la valeur de réponse correcte «3» n'a pas pu être prévue (classée) correctement 12/10 10 cas

3.png

Cas où la valeur de réponse correcte «4» n'a pas pu être prédite (classée) correctement 15/982 cas

4.png

6/892 cas où la valeur de réponse correcte «5» n'a pas pu être prédite (classée) correctement

5.png

13/958 cas où la valeur de réponse correcte «6» n'a pas pu être prédite (classée) correctement

6.png

Cas où la valeur de réponse correcte «7» n'a pas pu être prédite (classée) correctement 15/1028 cas

7.png

27/974 cas où la valeur de réponse correcte «8» n'a pas pu être prédite (classée) correctement

8.png

26/1009 cas où la valeur de réponse correcte «9» n'a pas pu être prédite (classée) correctement

9.png

la prochaine fois

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