In Letztes Mal habe ich MNIST für ML-Anfänger übersetzt, ein Tutorial von TensorFlow. Dieses Mal werde ich den Inhalt des Tutorials mit TensorFlow implementieren. Ich tat. Das heißt, der Code flattert bereits im Tutorial, aber es ist alles aus, also ist es Zeit, ihn zu implementieren und zu verstehen, was dieser Code bedeutet.
Da ich Python zum ersten Mal benutze, werde ich auch das Setup beschreiben, damit auch ähnliche Anfänger es ausführen können. Dies entspricht im Wesentlichen dem Inhalt der TensorFlow-Website. Das Ziel ist Mac.
Erstens ist die Installation von Python selbst.
brew install python
Außerdem wird pip, das Paketverwaltungssystem von Python, installiert.
sudo easy_install pip
TensorFlow scheint zu empfehlen, in einer virtuellen Python-Umgebung namens virtualenv zu arbeiten. Installieren Sie sie daher mit pip.
sudo pip install --upgrade virtualenv
Das ist alles für die Python-bezogene Installation.
Konfigurieren Sie vor der Installation von TensorFlow die virtuelle Umgebung. Ich bin mir nicht sicher, was "--system-site-package" bedeutet, aber folge vorerst der offiziellen Website.
virtualenv --system-site-packages ./tensorflow
Führen Sie nach Abschluss der Umgebungseinstellungen virtualenv aus.
cd tensorflow
source bin/activate
Installieren Sie TensorFlow. Das Setup ist jetzt abgeschlossen.
sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.8.0-py2-none-any.whl
Hier ist nun die Implementierung und Durchführung des eigentlichen Trainings.
Der vollständige Code ist unten. Fast alle Erklärungen sind in den Kommentaren im Code geschrieben, schauen Sie also bitte dort nach.
Ich habe den Code auch Gist gegeben. TensorFlow MNIST für ML-Anfänger-Tutorial-Code
mnist_for_ml_beginners.py
# -*- coding: utf-8 -*-
#TensorFlow importieren
import tensorflow as tf
#Eingabe zum Lesen von MNIST_data.Legen Sie py in dasselbe Verzeichnis und importieren Sie es
# input_data.py hat einen Link im Tutorial, also hol ihn dir von dort
# https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/examples/tutorials/mnist/input_data.py
import input_data
import time
#Startzeit
start_time = time.time()
print "Startzeit: " + str(start_time)
#MNIST-Daten lesen
#60000 Trainingsdaten (mnist).Zug) und 10000 Punkte Testdaten (mnist).Test) ist
#0 für Trainingsdaten und 0 für Testdaten-9 Bilder und ihre entsprechenden Bezeichnungen (0)-9) ist
#Das Bild ist 28x28px(=784)Größe
# mnist.train.Bilder[60000, 784]Ist ein Array von Mnist.train.Etiketten[60000, 10]Anordnung von
#Das Lables-Array wird angezeigt, wenn das entsprechende Bild eine Zahl von 3 ist.[0,0,0,1,0,0,0,0,0,0]Wurde
# mnist.test.Bilder[10000, 784]Ist ein Array von Mnist.test.Etiketten[10000, 10]Anordnung von
print "---Beginnen Sie mit dem Lesen der MNIST-Daten---"
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
print "---Abschluss des Lesens der MNIST-Daten---"
#Variable, um das Trainingsbild zu setzen
#Das Trainingsbild ist 28x28px groß und diese werden sortiert und in einem Vektor von 1 Zeile und 784 Spalten gespeichert.
#Keine ist so eingestellt, dass eine beliebige Anzahl von Trainingsbildern eingefügt werden kann.
x = tf.placeholder(tf.float32, [None, 784])
#Gewicht
#Zeile der px-Nummer des Trainingsbildes, Beschriftung (0-Anzahl von 9 Zahlen) Matrix von Zahlenspalten
#Geben Sie 0 als Anfangswert ein
W = tf.Variable(tf.zeros([784, 10]))
#vorspannen
#Anzahl der Etikettenspaltenmatrix
#Geben Sie 0 als Anfangswert ein
b = tf.Variable(tf.zeros([10]))
#Führen Sie eine Softmax-Regression durch
#y ist die Verteilung der Wahrscheinlichkeit, dass es sich um eine Zahl in Bezug auf die Eingabe x handelt (Bild)
#Nachdem Sie die Matrizen x und W mit der Matmul-Funktion multipliziert haben, addieren Sie b.
#y ist[1, 10]Matrix
y = tf.nn.softmax(tf.matmul(x, W) + b)
#Gekreuzte Entropie
# y_Ist das Etikett der richtigen Antwortdaten
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
#Optimieren Sie y, um die Kreuzentropie mithilfe der Gradientenhärtung zu minimieren
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#Führen Sie die Initialisierung der vorbereiteten Variablen Veriable aus
init = tf.initialize_all_variables()
#Sitzung starten
#Die Ausführung beginnt zum ersten Mal mit running (run(init)Andernfalls wird init nicht ausgeführt.
sess = tf.Session()
sess.run(init)
#1000 Schulungen (Zug)_Schritt)
# next_batch(100)Wählen Sie 100 zufällige Trainingssätze (Bilder und entsprechende Beschriftungen) aus
#Es gibt 60.000 Trainingsdaten, daher möchte ich alle verwenden, aber es kostet Geld, das heißt, es braucht Zeit, also verwende ich 100 zufällige
#Sie können ähnliche Ergebnisse mit 100 erhalten
# feed_Sie können mit dict einen Wert in den Platzhalter eingeben
print "---Fange an zu trainieren---"
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 "---Trainingsende---"
#Vorhersage der Richtigkeit
#Vorhersage y, von welcher Zahl das berechnete Bild ist, und korrekte Bezeichnung y_Vergleichen
#Gibt True zurück, wenn sie identisch sind
#argmax gibt den Index des Teils mit dem größten Wert im Array zurück
#Der Index mit dem höchsten Wert bedeutet, dass er die höchste Wahrscheinlichkeit hat, diese Zahl zu sein.
#Wenn True zurückgegeben wird, bedeutet dies, dass das Ergebnis des Trainings mit der Antwort übereinstimmt.
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
#Berechnung der Genauigkeit
# correct_Da die Vorhersage boolesch ist, wandeln Sie sie in float um und berechnen Sie den Durchschnittswert
#Bei Wahr in 1 konvertiert, bei Falsch in 0
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#Ausführung und Anzeige der Präzision
#Überprüfen Sie die Genauigkeit anhand des Bildes und der Beschriftung der Testdaten
#Da die Werte von W und b durch Softmax-Regression berechnet werden, kann y durch Eingabe von x berechnet werden.
print "Richtigkeit"
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
#Endzeit
end_time = time.time()
print "Endzeit: " + str(end_time)
print "Zeit genommen: " + str(end_time - start_time)
Das zweite Argument von tf.argmax scheint die Anzahl der Dimensionen anzugeben, aber da das Array von y und y_ eine davon in 1 Zeile und 10 Spalten abruft, geben Sie 1 (Dimension) an. Ist es da?
Die Ausführung selbst war sehr schnell und ich konnte alles vom Training bis zur Bestätigung in weniger als 3 Sekunden abschließen. Als ich es zum ersten Mal ausführte, brauchte ich ungefähr 5 Minuten, um die MNIST-Daten herunterzuladen.
Die Ausführungsmethode und das Ausgabeergebnis sind wie folgt.
$ python mnist_for_ml_beginners.py
Startzeit: 1449994007.63
---Beginnen Sie mit dem Lesen der MNIST-Daten---
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
---Abschluss des Lesens der MNIST-Daten---
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
---Fange an zu trainieren---
---Trainingsende---
Richtigkeit
0.9212
Endzeit: 1449994010.09
Zeit genommen: 2.45791196823
Sie sehen, dass die Genauigkeit etwas über 92% liegt. Da das Ergebnis nicht so ausgegeben wird, wie es im Eingabebild ausgegeben wurde, handelt es sich nur um ein numerisches Ergebnis. Diese Genauigkeit variiert von Lauf zu Lauf. Das liegt daran, dass die während des Trainings verwendeten Trainingsdaten unterschiedlich sind.
Deaktivieren Sie nach Abschluss des Vorgangs virtualenv, um den Vorgang abzuschließen.
deactivate
Als ich das Tutorial das letzte Mal übersetzt habe, habe ich den Inhalt bis zu einem gewissen Grad überprüft, sodass ich fortfahren konnte, während ich verstand, dass dieser Code bei der Implementierung dieses Mal so ist. Ich verstehe Softmax-Regression und Kreuzentropie immer noch nicht, daher denke ich, dass es besser ist, auch diesen Bereich zu untersuchen. Wie der Name schon sagt, ist die Softmax-Regression auch eine Regressionsanalyse.
Dieses Mal habe ich das Tutorial so ausgeführt, wie es ist, also habe ich nur das mit dem vorbereiteten Bild verwendet, aber ich würde gerne ein anderes Bild usw. ausprobieren. In diesem Fall denke ich jedoch, dass es notwendig ist, die Bildgröße anzupassen, zu normalisieren und den Inhalt von input_data.py zu sehen und zu verstehen. Es wird also eine Weile dauern. Als nächstes folgt [Tutorial für Experten](https :: //www.tensorflow.org/versions/master/tutorials/mnist/pros/index.html#deep-mnist-for-experts) Ich würde es gerne versuchen. Ist das die Produktion? Es scheint Deep Learning zu sein.
TensorFlow Download and Setup Ich habe versucht, Hello World mit TensorFlow und seiner Erklärung auszuführen
Recommended Posts