[PYTHON] Challenge classification des images par TensorFlow2 + Keras 1-Move pour le moment-

introduction

Il s'agit d'un mémo d'étude (premier) sur la classification des images (environnement Google Colaboratory) à l'aide de TensorFlow2 + Keras. Le sujet est la classification des images numériques manuscrites (** MNIST **), qui est un élément standard.

Plus précisément, pour les ** images ** suivantes (28 x 28 pixels) qui capturent des caractères manuscrits de «0» à «9» MNIST-1.png Laquelle de ** "0" à "9" peut-on classer chaque image? Le contenu est d'aborder le problème de ** (= problème de classification multi-classes) avec le deep learning (deep learning) par TensorFlow2 + Keras.

Utilisez Google Colabo., Ce qui est facile, pratique et gratuit pour l'environnement de développement et d'exécution. Veuillez consulter ici pour l'introduction de Google Colabo.

Dans cet article, j'ai copié l'exemple de code publié sur [Official HP] de TensorFlow (https://www.tensorflow.org/?hl=ja) et l'ai collé dans la cellule de code de Google Colab. Assurez-vous que vous pouvez le faire sans.

En plus de cela, il explique vaguement et vaguement "** ce que chaque partie du code fait " et " ce que le texte affiché à l'exécution véhicule **".

Qu'est-ce que TensorFlow

--Lisez "Tensol Flow" ou "Tencer Flow". --Une bibliothèque d'apprentissage automatique développée par Google qui vous permet de créer et de former (= apprendre / former) des réseaux de neurones (NN). Bien entendu, vous pouvez également effectuer des prédictions à l'aide du modèle NN entraîné. --1.0 est sorti en février 2017 et 2.0 en octobre 2019. ――Dans TF2.0, Keras (décrit plus loin) a été intégré pour améliorer la compatibilité avec Python, le rendant plus facile à utiliser et plus sophistiqué (). Le support GPU a également été renforcé (dit-il).

Keras

--Lisez «Kerasu».

Essayez l'exemple de code

Classification de classe pour l'ensemble de données d'images numériques manuscrites (MINIST) dans "Introduction à TensorFlow 2.0 pour les débutants" sur le site officiel de TensorFlow. Il existe un exemple de code (seulement une douzaine de lignes) (classés en catégories de «0» à «9»). Collez-le dans Google Colab et exécutez-le.

Passer de la version TF de 1.x à 2.x

Pour utiliser TensorFlow2, exécutez la ** commande magique ** suivante dans la cellule de code (collez-la dans la cellule de code et exécutez-la avec \ [Ctrl ] + \ [Entrée ]). La raison en est que depuis le 27 décembre 2019, Google Colab. A défini TensorFlow ** 1.x ** comme valeur par défaut, et l'a remplacé par ** 2.x ** C'est le traitement de.

GoogleColab.Préparation à


%tensorflow_version 2.x

S'il n'y a pas de problème, il sera affiché comme " TensorFlow 2.x selected. ".

Si vous exécutez TF (TensorFlow) de 1.x, le message " La version par défaut de TensorFlow dans Colab passera bientôt à TensorFlow 2.x. </ Font>" apparaîtra, il est donc fermé. Je ne pense pas que cette procédure sera nécessaire à l'avenir (TF 2.x sera la valeur par défaut).

Exemple de code et exécution

J'ai ajouté quelques commentaires à l'exemple de code sur le site officiel.

import tensorflow as tf

# (1)Téléchargez le jeu de données d'images numériques manuscrites (MNIST) et stockez-le dans une variable
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# (2)Normalisation des données (prétraitement des données d'entrée)
x_train, x_test = x_train / 255.0, x_test / 255.0

# (3)Construire un modèle NN
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

# (4)Compilation de modèles (y compris les paramètres de formation)
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

# (5)Modèle de formation (apprentissage / formation)
model.fit(x_train, y_train, epochs=5)

# (6)Évaluation du modèle
model.evaluate(x_test,  y_test, verbose=2)

Dans le programme court ci-dessus, nous procédons comme suit:

--Télécharger l'ensemble de données d'images numériques manuscrites et les stocker dans chaque variable (préparation des données) -- * _ train: données pour la formation (pour l'apprentissage, la formation) -- * _ test: Données de test (évaluation)
Pour plus de détails sur ces données, voir le deuxième "~ Regardons de plus près les données d'entrée ~ / items / 2c969ca4675d5a3691ef) ».

  • Normalisation des données (pré-traitement des données d'entrée) --Convertir les valeurs entières comprises entre 0 et 255 en valeurs réelles comprises entre 0,0 et 1,0 --Construction d'un modèle de réseau neuronal pour l'apprentissage automatique
  • Les détails ici seront expliqués dans la partie 7 "~ Comprendre les types de calques / fonctions d'activation ~". --Compilation du modèle (y compris les paramètres liés à l'apprentissage)
  • Les détails ici seront expliqués dans la partie 8 "~ Sélection d'un algorithme d'optimisation et d'une fonction de perte ~". --Modèle de formation utilisant les données de formation (* _ train) (→ ** Modèle formé ** terminé) --Évaluation du modèle à l'aide des données de test (* _test) (exécution de la classification d'image par modèle formé et correspondance des réponses (notation))

Le résultat de l'exécution du programme est le suivant.

Résultat d'exécution


Train on 60000 samples
Epoch 1/5
60000/60000 [==============================] - 5s 82us/sample - loss: 0.2992 - accuracy: 0.9134
Epoch 2/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.1457 - accuracy: 0.9561
Epoch 3/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.1096 - accuracy: 0.9659
Epoch 4/5
60000/60000 [==============================] - 5s 78us/sample - loss: 0.0876 - accuracy: 0.9730
Epoch 5/5
60000/60000 [==============================] - 5s 80us/sample - loss: 0.0757 - accuracy: 0.9765
10000/10000 - 0s - loss: 0.0766 - accuracy: 0.9762
[0.07658648554566316, 0.9762]

En termes de sens ...

  • Entraînement sur 60000 échantillons: Nous nous entraînerons à l'aide de 60 000 images de texte manuscrites. ―― ʻEpoch x / 5: C'est le xème apprentissage sur 5 fois au total. --5s 82us / échantillon --loss: 0.2992 --précision: 0.9134`: Il a fallu 82 $ \ mu $ secondes par image, et environ 5 secondes pour l'ensemble (60 000 images). La performance du modèle formé de cette manière (évaluée à l'aide des données d'apprentissage) était de 0,2992 pour la valeur de la fonction de perte (perte) et de 0,9134 pour le taux de réponse correct (précision).
  • Le taux de réponse correct de 0,9134 signifie que les images de 60 000 $ \ times 0,9134 = 54 804 $ peuvent être correctement classées de 0 à 9, et les images restantes de 60 000-54 804 $ = 5 196 $ sont mal classées. Interpréter. --10000 / 10000 --0s --perte: 0,0766 - précision: 0,9762: J'ai testé la prédiction de classification avec 10 000 images à tester (distinctes de celle utilisée pour la formation). Le test a duré 0 seconde, avec une note de fonction de perte de 0,0766 et un taux de réponse correcte de 0,9762.

Quel est le taux de réponse correct (précision)?

Aussi appelé «précision» ou «taux de réponse correct». Affiche le pourcentage d'images correctement classées. Par exemple, si 98 images sur 100 peuvent être classées correctement, le taux de réponse correct sera 98 $ / 100 = 0,98 $ (= 98%).

Le pourcentage de réponses correctes varie de 0,0 à 1,0, et plus la valeur ** est élevée (plus proche de 1,0), meilleur est le modèle ** (lorsqu'il est évalué à l'aide de données non utilisées pour la formation).

Quelle est la valeur de la fonction de perte (perte)?

Il y a une partie où la supériorité ou l'infériorité du modèle (classifieur) ne peut pas être mesurée uniquement du point de vue du taux de réponse correct. Par exemple, supposons que vous souhaitiez classer (prédire) une image (la réponse correcte est "3") en utilisant deux modèles différents comme suit.

ダウンロード.png

Pour cette image, le modèle A prédit "3" et le modèle B prédit également "3". Puisque la bonne réponse est «3», le taux de réponse correct est de 1,0 ** pour les deux modèles. En ne regardant que cet ** indice de taux de réponse correcte **, les deux modèles sont également bons.

Cependant, la prédiction du modèle A est "** 8 est de 10%, la confiance de 3 est de 90%, et 3 est sélectionné **", tandis que la prédiction du modèle B est "*". * 8 correspond à 45%, 3 correspond à 55% et 3 correspond à la sortie ** "Et si?

** Même avec le même taux de réponse correcte de 1,0 **, on peut dire que le modèle A est supérieur.

Cependant, cela ne peut pas être pris en compte dans l'indice de taux de réponse correct. Celle pour l'évaluer est la ** fonction de perte **, et la valeur évaluée par la fonction de perte est ** perte **.

La classification des nombres manuscrits traitée ici appartient au type de "** problème de classification multi-classes **", et l'indice de ** erreur d'entropie croisée ** (entropie croisée) est souvent utilisé pour la fonction de perte de ce problème. Je vais. L'entropie croisée est calculée en utilisant chaque valeur de la couche de sortie du réseau neuronal et les données de réponse correctes). Les détails sont expliqués dans la partie 8 "~ Sélection d'un algorithme d'optimisation et d'une fonction de perte ~".

Fondamentalement, la valeur de la fonction de perte prend une valeur de 0,0 ou plus, et ** plus la valeur de la fonction de perte est petite (plus proche de 0,0), meilleur est le modèle **. La valeur de la fonction de perte peut dépasser 1,0.

la prochaine fois

―― La prochaine fois, je voudrais expliquer les données d'entraînement (x_train, y_train) et les données de test (x_test, y_test) et les visualiser à l'aide de matplotlib.

Recommended Posts

Challenge classification des images par TensorFlow2 + Keras 1-Move pour le moment-
Défiez la classification des images avec TensorFlow2 + Keras CNN 1 ~ Bougez pour le moment ~
Défi la classification des images par TensorFlow2 + Keras 4 ~ Prédisons avec un modèle entraîné ~
Défiez la classification des images par TensorFlow2 + Keras 5 ~ Observez les images dont la classification échoue ~
Challenge classification des images par TensorFlow2 + Keras 7-Compréhension des types de couches et des fonctions d'activation-
Mémo de flux pour déplacer LOCUST pour le moment
Challenge classification des images par TensorFlow2 + Keras 3 ~ Visualiser les données MNIST ~
Défiez la classification des images par TensorFlow2 + Keras 6-Essayez le prétraitement et la classification des images préparées par vous-même-
Je veux déplacer le sélénium pour le moment [pour mac]
Comprendre la classe python Struggle (1) Déplaçons-la pour le moment
Défiez la classification des images avec TensorFlow2 + Keras 9-Apprentissage, sauvegarde et chargement de modèles-
J'ai essayé tensorflow pour la première fois
Pour le moment, importez-les dans jupyter
Faire un histogramme pour le moment (matplotlib)
Exécutez yolov4 "pour le moment" dans Windows
J'ai joué avec Floydhub pour le moment
Juge Yosakoi Naruko par classification d'image de Tensorflow.
Essayez d'utiliser LINE Notify pour le moment
virtualenv Pour le moment, c'est tout!
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
Simulation de dynamique moléculaire à essayer pour le moment
Identifiez le nom de l'image de la fleur avec des keras (flux tenseur)
Essayez d'installer Arch Linux pour le moment.
À côté d'Excel, le notebook Jupyter pour le moment
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Pour le moment, essayez d'utiliser l'API de dialogue de discussion docomo
Je veux créer un Dockerfile pour le moment.
Premier Kaggle (kaggle ①)
CNN (1) pour la classification des images (pour les débutants)
Kaguru pour la première fois
Touchons l'API Vision de Google de Python pour le moment
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
Essayez d'utiliser FireBase Cloud Firestore avec Python pour le moment
Voir python pour la première fois
Démarrez Django pour la première fois
[Python] [Apprentissage automatique] Les débutants sans aucune connaissance essaient l'apprentissage automatique pour le moment