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.
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.
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.
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
Maintenant, voici la mise en œuvre et l'exécution de la formation proprement dite.
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?
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
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.
TensorFlow Download and Setup J'ai essayé d'exécuter Hello World avec TensorFlow et son explication
Recommended Posts