[PYTHON] Créer un modèle d'apprentissage à l'aide de MNIST

Qu'est-ce que MNIST

MNIST est un jeu de données d'image utilisé pour reconnaître les nombres manuscrits. Cette fois, nous allons essayer de créer un modèle d'apprentissage qui peut identifier les nombres manuscrits en utilisant un tel MNIST.

Données MNIST

Il est composé de données d'image (image) qui sont une image de nombres écrits à la main et de données d'étiquette (étiquette) qui représentent les nombres écrits sur l'image.

image.png

Seulement 60 000 de ces paires sont fournies pour l'apprentissage et 10 000 pour la vérification.

Contenu des données d'image réelles

Afin de mieux comprendre le modèle d'apprentissage, vérifions quel type de données est réellement contenu dans MNIST.


import sys
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from PIL import Image
 
(X_train, y_train), (X_test, y_test) = mnist.load_data()
 
#X_Imagerie de train et y_valeur du train
#Examinons les données d'image de la première formation
train_no = 0
 
print('Image de formation')
for xs in X_train[train_no]:
    for x in xs:
        sys.stdout.write('%03d ' % x)
    sys.stdout.write('\n')
    
outImg = Image.fromarray(X_train[train_no].reshape((28,28))).convert("RGB")
outImg.save("train.png ")
 
print('Label de formation(y_train) = %d' % y_train[train_no])
 
#X_imagerie de test et y_valeur du test
#Examinons les données d'image du premier test
test_no = 0
 
print('Image de test')
for xs in X_test[test_no]:
    for x in xs:
        sys.stdout.write('%03d ' % x)
    sys.stdout.write('\n')
    
outImg = Image.fromarray(X_test[test_no].reshape((28,28))).convert("RGB")
outImg.save("test.png ")
 
print('Étiquette de test(y_test) = %d' % y_test[test_no])

Ce programme affiche les premières données d'apprentissage et les premières données de test.

X_train = données d'image d'entraînement, y_train = étiquette d'entraînement, X_test = données d'image de test, y_test = étiquette de test, donc si vous vérifiez le contenu de chacun, les résultats d'exécution suivants seront obtenus.

Image de formation
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 003 018 018 018 126 136 175 026 166 255 247 127 000 000 000 000 
000 000 000 000 000 000 000 000 030 036 094 154 170 253 253 253 253 253 225 172 253 242 195 064 000 000 000 000 
000 000 000 000 000 000 000 049 238 253 253 253 253 253 253 253 253 251 093 082 082 056 039 000 000 000 000 000 
000 000 000 000 000 000 000 018 219 253 253 253 253 253 198 182 247 241 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 080 156 107 253 253 205 011 000 043 154 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 014 001 154 253 090 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 139 253 190 002 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 011 190 253 070 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 035 241 225 160 108 001 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 081 240 253 253 119 025 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 045 186 253 253 150 027 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 016 093 252 253 187 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 249 253 249 064 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 046 130 183 253 253 207 002 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 039 148 229 253 253 253 250 182 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 024 114 221 253 253 253 253 201 078 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 023 066 213 253 253 253 253 198 081 002 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 018 171 219 253 253 253 253 195 080 009 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 055 172 226 253 253 253 253 244 133 011 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 136 253 253 253 212 135 132 016 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
Label de formation(y_train) = 5
Image de test
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 084 185 159 151 060 036 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 222 254 254 254 254 241 198 198 198 198 198 198 198 198 170 052 000 000 000 000 000 000 
000 000 000 000 000 000 067 114 072 114 163 227 254 225 254 254 254 250 229 254 254 140 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 017 066 014 067 067 067 059 021 236 254 106 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 083 253 209 018 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 022 233 255 083 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 129 254 238 044 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 059 249 254 062 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 133 254 187 005 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 009 205 248 058 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 126 254 182 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 075 251 240 057 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 019 221 254 166 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 003 203 254 219 035 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 038 254 254 077 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 031 224 254 115 001 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 133 254 254 052 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 061 242 254 254 052 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 121 254 254 219 040 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 121 254 207 018 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 
Étiquette de test(y_test) = 7

Vous pouvez voir faiblement les nombres 5 et 7. Et l'étiquette était également affichée.

Créer un modèle d'apprentissage à l'aide de MNIST

Le modèle d'apprentissage automatique reçoit une valeur d'entrée sous une forme qui peut être comprise par un ordinateur, évalue et juge quelque chose, et délivre une valeur de sortie. Ce qui est nécessaire pour développer un modèle, c'est une énorme quantité de données d'entraînement, qui est cette fois gérée par MNIST.       Après avoir appris à plusieurs reprises sous tous les angles, testez pour mesurer la compréhension. C'est ce qu'on appelle l'évaluation de la précision du modèle et les données de test y sont utilisées.

Créons en fait un modèle d'apprentissage.

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import Adam 
from keras.utils import np_utils
 
def build_model():
 #Créer un modèle
 model = Sequential()
 model.add(Dense(512, input_shape=(784,)))
 model.add(Activation('relu'))
 model.add(Dropout(0.2))
 
 model.add(Dense(512))
 model.add(Activation('relu'))
 model.add(Dropout(0.2))
 
 model.add(Dense(10))
 model.add(Activation('softmax'))
 
 #Définition de la fonction de perte
 model.compile(
 loss='categorical_crossentropy',
 optimizer=Adam(),
 metrics=['accuracy'])
 
 return model
 
if __name__ == "__main__":
 #Lecture des données MNIST
 #Données d'entraînement 60000, données de test 10000
 #28 pixels x 28 pixels=784 pixels de données
 #Les couleurs sont de 0 à 255
 (X_train, y_train), (X_test, y_test) = mnist.load_data()
 X_train = X_train.reshape(60000, 784).astype('float32')
 X_test = X_test.reshape(10000, 784).astype('float32')
 X_train /= 255
 X_test /= 255
 
 #Convertir en un tableau à 10 dimensions//Le chiffre 5 ressemble à ceci[0,0,0,0,1,0,0,0,0,0]
 y_train = np_utils.to_categorical(y_train, 10)
 y_test = np_utils.to_categorical(y_test, 10)
 
 #Formation avec des données Cette fois, nous allons apprendre deux fois car le temps est gagné
 model = build_model()
 model.fit(X_train, y_train, 
 nb_epoch=2, #Nombre de fois pour apprendre 2 fois cette fois comme vous le souhaitez pytyon nb_l'époque est une répétition de gamme
 batch_size=128, #128 images sont acquises au hasard. N'importe quel nombre est bien
 validation_data=(X_test, y_test)
 )
 
 
 #Enregistrer le modèle de formation
 json_string = model.to_json()
 #Extension de nom de fichier de modèle.json
 open('mnist.json', 'w').write(json_string)
 #L'extension d'enregistrement du fichier de poids est hdf5
 model.save_weights('mnist.hdf5')
 
 #Évaluer le modèle
 score = model.evaluate(X_test, y_test, verbose=1)
 
 print('loss=', score[0])
 print('accuracy=', score[1])

Il existe deux modèles de formation, un fichier json et un fichier hdf5.

Le résultat de l'exécution est

Train on 60000 samples, validate on 10000 samples
Epoch 1/2
60000/60000 [==============================] - 9s 152us/step - loss: 0.2453 - accuracy: 0.9264 - val_loss: 0.0981 - val_accuracy: 0.9683
Epoch 2/2
60000/60000 [==============================] - 9s 150us/step - loss: 0.1009 - accuracy: 0.9693 - val_loss: 0.0752 - val_accuracy: 0.9760
10000/10000 [==============================] - 1s 65us/step
loss= 0.07517002068450675
accuracy= 0.9760000109672546

Nous avons pu créer un modèle avec un taux de réponse correcte de 97%.

Comme les données sont faciles à comprendre, nous avons appris avec un petit nombre d'époque = 2 afin de gagner du temps, mais nous pouvons obtenir une certaine précision.

En fait, vous apprenez avec des nombres tels que 500 et 1000.

Résumé

J'ai approfondi ma compréhension de l'apprentissage automatique et du MNIST. Je voudrais concevoir le code que j'ai écrit cette fois à ma manière pour que je puisse améliorer la précision.

Recommended Posts

Créer un modèle d'apprentissage à l'aide de MNIST
Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique
Créer une application Web avec Flask ②
Créer un tableau simple à l'aide de prettytable
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
Analyse inverse du modèle d'apprentissage automatique
Créer une application Web avec Flask ①
Créer une application Web avec Flask ③
Créer une application Web avec Flask ④
Création d'un modèle séquentiel Tensorflow avec une image originale ajoutée à MNIST
Python: Introduction à Flask: création d'une application d'identification de numéro à l'aide de MNIST
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Création d'une application d'analyse de données à l'aide de Streamlit
Obtenir un modèle de référence à l'aide de Django Serializer
Créer un environnement de développement pour l'apprentissage automatique
J'ai créé un classificateur de visage Dir en gray en utilisant TensorFlow --⑦ Modèle d'apprentissage
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Apprentissage par renforcement 10 Essayez d'utiliser un réseau neuronal formé.
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte
Essayez de créer un fichier compressé en utilisant Python et zlib
4. Création d'un programme structuré
Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras
Créez un graphique à l'aide du bouton et du curseur de l'intrigue
J'ai essayé d'héberger un exemple de modèle de Pytorch en utilisant TorchServe
Création d'outils de grattage
Apprendre un réseau neuronal à l'aide de Chainer
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Construire un modèle seq2seq à l'aide de l'inférence API fonctionnelle de Keras
Créer un chargeur de jeu de données
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
Mémo de construction d'environnement d'apprentissage automatique par Python
xgboost: modèle d'apprentissage automatique efficace pour les données de table
(Remarque) Une histoire sur la création d'un système de questions et réponses à l'aide de Spring Boot et de l'apprentissage automatique (SVM).
Implémentation de VGG16 à l'aide de Keras créé sans utiliser de modèle entraîné
100 Language Processing Knock-84 (en utilisant des pandas): Création d'une matrice de contexte de mots
Une note lors de la création d'un graphe dirigé à l'aide de Graphviz en Python
Lancement d'un environnement d'apprentissage automatique à l'aide de Google Compute Engine (GCE)
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
L'utilisateur n'est pas ajouté avec succès après la création d'un modèle d'utilisateur personnalisé
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
J'ai essayé d'écrire dans un modèle de langage profondément appris
Modèle d'apprentissage automatique prenant en compte la maintenabilité
Création de plugins Spigot à l'aide d'Eclipse
Mesure du temps à l'aide d'une horloge
Tutoriel Pepper (5): Utilisation d'une tablette
Utiliser une imprimante avec Debian 10
Créer un environnement d'apprentissage automatique
Création, apprentissage et raisonnement de modèles d'apprentissage
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Un mémorandum d'utilisation de eigen3
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Créer une intelligence artificielle par apprentissage automatique à l'aide de TensorFlow à partir de zéro connaissance - Introduction 1
[Tutoriel] Créez un extracteur d'expressions unique en 30 minutes à l'aide de l'apprentissage automatique