[PYTHON] Réalisation du didacticiel TensorFlow MNIST pour débutants en ML

introduction

Dans Dernière fois, j'ai traduit MNIST For ML Beginners, qui est un tutoriel de TensorFlow, donc cette fois je vais réellement implémenter le contenu du tutoriel en utilisant TensorFlow. J'ai fait. Cela dit, le code flotte déjà dans le didacticiel, mais tout est terminé, il est donc temps de l'implémenter tout en comprenant ce que signifie ce code.

Configuration environnementale

Comme c'est la première fois que j'utilise Python, je décrirai également la configuration afin que même des débutants similaires puissent l'exécuter. C'est fondamentalement le même que le contenu du site TensorFlow. La cible est mac.

Installation de Python

Le premier est l'installation de Python lui-même.

brew install python

Il installe également pip, le système de gestion de paquets de Python.

sudo easy_install pip

TensorFlow semble recommander de s'exécuter dans un environnement virtuel Python appelé virtualenv, alors installez-le à l'aide de pip.

sudo pip install --upgrade virtualenv

C'est tout pour l'installation liée à Python.

Installez TensorFlow

Avant d'installer TensorFlow, configurez l'environnement virtualenv. Je ne suis pas sûr de ce que signifie --system-site-package, mais pour le moment, suivez le site officiel.

virtualenv --system-site-packages ./tensorflow

Une fois les paramètres d'environnement définis, exécutez virtualenv.

cd tensorflow
source bin/activate

Installez TensorFlow. La configuration est maintenant terminée.

sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl

Exécutez MNIST pour les débutants en ML

Maintenant, voici la mise en œuvre et l'exécution de la formation proprement dite.

Code d'implémentation pour MNIST pour les débutants en ML

Le code complet est ci-dessous. Presque toutes les explications sont écrites dans les commentaires du code, veuillez donc y jeter un œil.

J'ai également donné le code à Gist. TensorFlow MNIST For ML Beginners Tutorial Code

mnist_for_ml_beginners.py


# -*- coding: utf-8 -*-

#Importer TensorFlow
import tensorflow as tf
#Entrée pour lire MNIST_data.Placez py dans le même répertoire et importez
# input_data.py a un lien dans le tutoriel alors récupérez-le à partir de là
# https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/examples/tutorials/mnist/input_data.py
import input_data

import time

#Heure de début
start_time = time.time()
print "Heure de début: " + str(start_time)

#Lire les données MNIST
#60000 données d'entraînement (mnist).train) et 10000 points de données de test (mnist).test) est
#0 pour les données d'entraînement et 0 pour les données de test-9 images et leurs étiquettes correspondantes (0)-9) est
#L'image fait 28x28px(=784)Taille
# mnist.train.images[60000, 784]Est un tableau de mnist.train.étiquettes[60000, 10]Tableau de
#Le tableau des étiquettes sera si l'image d'images correspondante est un nombre de 3.[0,0,0,1,0,0,0,0,0,0]Est devenu
# mnist.test.images[10000, 784]Est un tableau de mnist.test.étiquettes[10000, 10]Tableau de
print "---Commencer à lire les données MNIST---"
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print "---Fin de la lecture des données MNIST---"

#Variable pour mettre l'image de la formation
#L'image d'entraînement mesure 28x28px, et celles-ci sont triées et stockées dans un vecteur de 1 ligne et 784 colonnes.
#Aucun est défini pour qu'un nombre illimité d'images d'entraînement puisse être inséré.
x = tf.placeholder(tf.float32, [None, 784])

#poids
#Ligne de nombre px de l'image d'entraînement, libellé (0-Nombre de 9 nombres) Matrice de colonnes de nombres
#Entrez 0 comme valeur initiale
W = tf.Variable(tf.zeros([784, 10]))

#biais
#Matrice de colonne du nombre d'étiquettes
#Entrez 0 comme valeur initiale
b = tf.Variable(tf.zeros([10]))

#Effectuer une régression softmax
#y est la distribution de la probabilité qu'il s'agisse d'un nombre pour l'entrée x (image)
#Après avoir multiplié les matrices x et W avec la fonction matmul, ajoutez b.
#y est[1, 10]Matrice
y = tf.nn.softmax(tf.matmul(x, W) + b)

#Entropie croisée
# y_Est-ce que l'étiquette des données de réponse correctes
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = -tf.reduce_sum(y_*tf.log(y))

#Optimiser y pour minimiser l'entropie croisée en utilisant le durcissement par gradient
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)

#Exécuter l'initialisation de la variable préparée Veriable
init = tf.initialize_all_variables()

#Démarrer la session
#L'exécution démarre pour la première fois en exécutant (run(init)Sinon, init ne sera pas exécuté)

sess = tf.Session()
sess.run(init)

#1000 formations (train)_étape)
# next_batch(100)Sélectionnez 100 ensembles d'entraînement aléatoires (images et étiquettes correspondantes) dans
#Il y a 60000 données d'entraînement, donc je veux les utiliser toutes, mais cela coûte de l'argent, c'est-à-dire que cela prend du temps, alors j'en utilise 100 aléatoires
#Vous pouvez obtenir des résultats similaires avec 100
# feed_Vous pouvez entrer une valeur dans l'espace réservé avec dict
print "---Commence l'entraînement---"
for i in range(1000):
	batch_xs, batch_ys = mnist.train.next_batch(100)
	sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
print "---Fin de la formation---"

#Prédiction de l'exactitude
#Prédiction y du nombre de l'image calculée et étiquette correcte y_Comparer
#Renvoie Vrai s'ils sont identiques
#argmax renvoie l'index de la partie avec la plus grande valeur du tableau
#L'index avec la valeur la plus élevée signifie qu'il a la probabilité la plus élevée d'être ce nombre.
#Si True est renvoyé, cela signifie que le résultat de l'entraînement est le même que la réponse.
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

#Calcul de la précision
# correct_Puisque la prédiction est booléenne, transtypez-la en flottant et calculez la valeur moyenne
#Converti en 1 si vrai, 0 si faux
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

#Exécution et affichage de la précision
#Vérifiez la précision avec l'image et l'étiquette des données de test
#Puisque les valeurs de W et b sont calculées par régression softmax, y peut être calculé en entrant x.
print "précision"
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

#Heure de fin
end_time = time.time()
print "Heure de fin: " + str(end_time)
print "Temps pris: " + str(end_time - start_time)

Le deuxième argument de tf.argmax semble spécifier le nombre de dimensions, mais puisque le tableau de y et y_ en récupère une sur 1 ligne et 10 colonnes, spécifiez 1 (dimension). C'est ici?

Résultat d'exécution

L'exécution elle-même a été très rapide et j'ai pu tout terminer, de la formation à la confirmation en moins de 3 secondes. Lorsque je l'ai exécuté pour la première fois, il m'a fallu environ 5 minutes pour télécharger les données MNIST.

La méthode d'exécution et le résultat de sortie sont les suivants.

$ python mnist_for_ml_beginners.py
Heure de début: 1449994007.63
---Commencer à lire les données MNIST---
Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
---Fin de la lecture des données MNIST---
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
can't determine number of CPU cores: assuming 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
---Commence l'entraînement---
---Fin de la formation---
précision
0.9212
Heure de fin: 1449994010.09
Temps pris: 2.45791196823

Vous pouvez voir que la précision est un peu plus de 92%. Étant donné que le résultat n'est pas produit comme ce qui a été produit dans l'image d'entrée, il s'agit simplement d'un résultat numérique. Cette précision varie d'une exécution à l'autre. C'est parce que les données d'entraînement utilisées pendant l'entraînement sont différentes.

Une fois terminé, désactivez virtualenv pour terminer.

deactivate

en conclusion

Lorsque j'ai traduit le tutoriel la dernière fois, j'ai vérifié le contenu dans une certaine mesure, donc j'ai pu continuer tout en comprenant que ce code est comme ça lors de la mise en œuvre cette fois. Je ne comprends toujours pas la régression softmax et l'entropie croisée, donc je pense qu'il est préférable d'étudier également ce domaine. Comme son nom l'indique, la régression Softmax est également une analyse de régression.

Cette fois, j'ai exécuté le tutoriel tel quel, donc j'ai juste utilisé celui avec l'image préparée, mais j'aimerais essayer une autre image, etc. Cependant, dans ce cas, je pense qu'il est nécessaire d'ajuster la taille de l'image, de la normaliser, de voir et de comprendre le contenu de input_data.py, donc cela prendra un certain temps, alors voici [Tutoriel pour les experts](https :: //www.tensorflow.org/versions/master/tutorials/mnist/pros/index.html#deep-mnist-for-experts) Je voudrais essayer. Est-ce la production? Cela semble être du Deep Learning.

Site de référence pour l'installation

TensorFlow Download and Setup J'ai essayé d'exécuter Hello World avec TensorFlow et son explication

Recommended Posts

Réalisation du didacticiel TensorFlow MNIST pour débutants en ML
Tutoriel TensorFlow MNIST pour les débutants en ML
Tutoriel TensorFlow -MNIST pour les débutants en ML
[Explication pour les débutants] Tutoriel TensorFlow MNIST (pour les débutants)
Traduction TensorFlow MNIST pour les débutants en ML
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
[Explication pour les débutants] Tutoriel TensorFlow Deep MNIST
[Traduisez approximativement le didacticiel TensorFlow en japonais] 1. MNIST pour les débutants en ML
Notes supplémentaires pour TensorFlow MNIST pour les débutants en ML
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
[Français] Tutoriel officiel NumPy "NumPy: les bases absolues pour les débutants"
[Traduisez approximativement le didacticiel TensorFlow en japonais] 2. Deep MNIST pour les experts
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
J'ai essayé le tutoriel TensorFlow 1er
J'ai essayé le tutoriel TensorFlow 2ème
[Déprécié] Tutoriel pour débutant Chainer v1.24.0
TensorFlow Deep MNIST pour la traduction d'experts
J'ai essayé tensorflow pour la première fois
Défis de la compétition Titanic pour les débutants de Kaggle
Résumé du tutoriel Django pour les débutants par les débutants ③ (Afficher)
Les débutants lisent "Introduction à TensorFlow 2.0 pour les experts"
Tutoriel du didacticiel TensorFlow
Résumé du tutoriel Django pour les débutants par les débutants ⑤ (test)
Visualisation de l'état de tir de la couche cachée du modèle appris dans le tutoriel TensorFlow MNIST
[Explication pour les débutants] Syntaxe et concept de base de TensorFlow
Le moyen le plus rapide pour les débutants de maîtriser Python
Résumé du tutoriel Django pour les débutants par les débutants ⑦ (Personnaliser l'administrateur)
Résumé du tutoriel Django pour les débutants par les débutants ⑥ (fichier statique)
Résumé du tutoriel Django pour les débutants par les débutants ② (Modèle, Admin)
Résumé du tutoriel Django pour les débutants par les débutants ① (création de projet ~)
Installation de TensorFlow sur Windows Easy pour les débutants en Python
Mathématiques pour ML
Code pour TensorFlow MNIST débutant / expert avec commentaires japonais
[Pour les débutants] Installez le package dans l'environnement Anaconda (Janome)
Création d'un programme de génération d'images MNIST par DCGAN (tutoriel tensorflow)
[Pour les débutants] Quantifier la similitude des phrases avec TF-IDF