[PYTHON] Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials

Einführung

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.

Umgebungseinstellung

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.

Python-Installation

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.

Installieren Sie TensorFlow

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

Führen Sie MNIST für ML-Anfänger aus

Hier ist nun die Implementierung und Durchführung des eigentlichen Trainings.

Implementierungscode für MNIST Für ML-Anfänger

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?

Ausführungsergebnis

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

abschließend

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.

Referenzseite für die Einrichtung

TensorFlow Download and Setup Ich habe versucht, Hello World mit TensorFlow und seiner Erklärung auszuführen

Recommended Posts

Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
TensorFlow Tutorial MNIST Für ML-Anfänger
TensorFlow Tutorial -MNIST Für ML-Anfänger
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
TensorFlow MNIST Für ML Anfänger Übersetzung
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
[Übersetzen Sie das TensorFlow-Tutorial grob ins Japanische] 1. MNIST für ML-Anfänger
Ergänzende Hinweise zu TensorFlow MNIST für ML-Anfänger
Ich habe versucht, das TensorFlow-Tutorial mit Kommentaren auszuführen (_TensorFlow_2_0_Einführung für Anfänger).
[Übersetzung] NumPy Official Tutorial "NumPy: die absoluten Grundlagen für Anfänger"
[Übersetzen Sie das TensorFlow-Tutorial grob ins Japanische] 2. Deep MNIST For Experts
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
Ich habe das TensorFlow-Tutorial als erstes ausprobiert
Ich habe das 2. TensorFlow-Tutorial ausprobiert
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Deep MNIST für Expertenübersetzung
Ich habe zum ersten Mal Tensorflow ausprobiert
Herausforderungen des Titanic-Wettbewerbs für Kaggle-Anfänger
Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
TensorFlow Tutorial Tutorial
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Visualisierung des Zündzustands der verborgenen Schicht des Modells, die im TensorFlow MNIST-Lernprogramm gelernt wurde
[Erklärung für Anfänger] Grundlegende Syntax und Konzept von TensorFlow
Der schnellste Weg für Anfänger, um Python zu beherrschen
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑦ (Customize Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑥ (statische Datei)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ① (Projekterstellung ~)
Installieren von TensorFlow unter Windows Easy für Python-Anfänger
Mathematik für ML
Code für TensorFlow MNIST Anfänger / Experte mit japanischen Kommentaren
[Für Anfänger] Installieren Sie das Paket in der Anaconda-Umgebung (Janome)
Erstellung eines MNIST-Bilderzeugungsprogramms durch DCGAN (Tensorflow-Tutorial)
[Für Anfänger] Quantifizieren Sie die Ähnlichkeit von Sätzen mit TF-IDF