[PYTHON] TensorFlow Tutorial MNIST Für ML-Anfänger

Da TensorFlow veröffentlicht wurde, habe ich mich entschlossen, neuronale Netze während der Verwendung zu untersuchen. Ich werde mein Studium je nach Stimmung aufzeichnen.

Versuchen Sie zu installieren

Mit pip trifft die CPU-Version nur den Befehl, wie von Readme angewiesen. Ich habe sowieso keine GPU zu Hause. https://github.com/tensorflow/tensorflow

Ich konnte bestätigen, dass es unter Ubuntu und Mac ordnungsgemäß funktioniert. Windows-Benutzer wissen nicht, wie es geht. Geben Sie also bitte Ihr Bestes. Geben Sie nach der Installation "import tensorflow as tf" ein, um sicherzustellen, dass Sie nicht wütend werden.

Versuche dich zu bewegen

Ich habe mit dem folgenden Tutorial begonnen. http://tensorflow.org/tutorials/mnist/beginners/index.md

Nun, es ist wie eine logistische Regression mit 10-dimensionaler Ausgabe, und es ist die übliche handgeschriebene MNIST-Zeichenklassifizierung. Ich wollte ein Diagramm oder eine Formel schreiben, aber das Diagramm im Tutorial war so schön, dass ich dachte, es sei in Ordnung.

Bitte beachten Sie, dass input_data.py erforderlich ist, um den Tutorial-Code auszuführen.

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

import input_data
import tensorflow as tf

#MNIST-Datensatz herunterladen und laden
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

#Bereiten Sie Variablen vor, die Gewichte und Schwellenwerte darstellen(Der Anfangswert ist Null)
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

#Variablen zum Einfügen von Merkmalsvektoren während des Trainings
x = tf.placeholder("float", [None, 784])

#Softmax-Funktion definieren
y = tf.nn.softmax(tf.matmul(x, W) + b)

#Variable zur Eingabe des wahren Etikettenwerts während des Trainings
y_ = tf.placeholder("float", [None,10])

#Definieren Sie die Verlustfunktion mit Kreuzentropie
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

#Lernmethode definieren(Schrittweite 0.Ziel ist es, die Kreuzentropie mit der Gradientenmethode 01 zu minimieren)
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(cross_entropy)

#Bereiten Sie eine Sitzung vor
sess = tf.Session()

#Variabler Initialisierungsprozess
init = tf.initialize_all_variables()
sess.run(init)

for i in range(1000):
    #Daten zur Verwendung in Mini-Batch
    batch_xs, batch_ys = mnist.train.next_batch(100)
    #Update mit Farbverlauf
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

#Definieren Sie eine Funktion, die den Prozentsatz der richtigen Antworten zurückgibt
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

#Zeigen Sie die Ergebnisse an
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

Versuche zu lesen

Datenaufbereitung

#MNIST-Datensatz herunterladen und laden
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

Bereiten Sie die Daten mit dem mysteriösen Modul zum Herunterladen des von Google bereitgestellten MNIST-Datensatzes vor. Ich benötige dies nicht separat, aber das Umschreiben ist mühsam. Verwenden wir es also. Da es sich bei meinem Zuhause um eine ADSL-Leitung handelt, dauert das Herunterladen einige Zeit, für Ihr Zuhause ist dies jedoch in Ordnung.

Vorbereitung der zu aktualisierenden Variablen

#Bereiten Sie Variablen vor, die Gewichte und Schwellenwerte darstellen(Der Anfangswert ist Null)
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

Bereiten Sie eine Matrix W vor, die die Gewichte und einen Schwellenwert darstellt. B. Sie ähnelt einem Array von Zahlen, wird jedoch in einem Typ namens Variable für die Verarbeitung durch TensorFlow vorbereitet. Es scheint, dass Sie das Array von numpy auch wie folgt in Variable konvertieren können.

W = tf.Variable(np.random.uniform(-1, 1, size=[784, 10]))

Bereiten Sie Variablen und Funktionen vor

#Variablen zum Einfügen von Merkmalsvektoren während des Trainings
x = tf.placeholder("float", [None, 784])
#Softmax-Funktion definieren
y = tf.nn.softmax(tf.matmul(x, W) + b)
#Variable zur Eingabe des wahren Etikettenwerts während des Trainings
y_ = tf.placeholder("float", [None,10])
#Definieren Sie die Verlustfunktion mit Kreuzentropie
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))

Es kam eine mysteriöse Sache namens Platzhalter heraus. Dies ist eine Variable, deren Wert noch nicht angegeben wurde. Wenn Sie später den Wert von "x" oder "y_" angeben, ist dies das Ergebnis der Operation, bei der "y" verwendet wird Sie können auswerten, was mit den Werten von und cross_entropy` passiert. Insbesondere wird die Verlustfunktion "cross_entropy" ausgewertet, wenn Sie die Merkmalsmatrix in "x" und die wahre Bezeichnung in "y" einfügen.

Auswahl der Optimierungsmethode

#Lernmethode definieren(Schrittweite 0.Ziel ist es, die Kreuzentropie mit der Gradientenmethode 01 zu minimieren)
train_step = tf.train.GradientDescentOptimizer(0.005).minimize(cross_entropy)

Geben Sie die Optimierungsmethode und den Wert an, den Sie minimieren möchten. Hier geben wir die Methode mit dem steilsten Abstieg an. 0,005 ist die Schrittgröße. Es spielt keine Rolle, aber im neuronalen Netz wird sie als Lernrate bezeichnet, während sie bei der Optimierung verwendet wird Da Menschen die Gradientenmethode nicht als maschinelles Lernen verwenden, wird sie häufig als Schrittgröße bezeichnet.

Sitzung erstellen

#Bereiten Sie eine Sitzung vor
sess = tf.Session()
#Variabler Initialisierungsprozess
init = tf.initialize_all_variables()
sess.run(init)

Zu diesem Zeitpunkt ist das mysteriöse Konzept einer Sitzung aufgetaucht. Ich weiß nicht, was es ist, aber TensorFlow scheint Variablen usw. für jede Sitzung zu verwalten. Wenn Sie keine Sitzung erstellen und die Initialisierungsverarbeitung durchführen, Variablen usw. Es ist nicht möglich, den Wert dessen einzugeben, was in erstellt wurde. Nachdem der Initialisierungsprozess abgeschlossen ist, sehen Sie sich beispielsweise den Inhalt von W über eine Sitzung wie folgt an.

>>> sess.run(W)
array([[ 0.6923129 , -0.20792764,  0.03128824, ...,  0.91015261,
         0.84531021, -0.81436723],
       [-0.6045441 ,  0.18968499, -0.48082295, ..., -0.65939605,
         0.61858588, -0.2352511 ],
       [-0.56046396, -0.35212722, -0.44472805, ...,  0.82507199,
         0.77793002, -0.87778318],
       ..., 
       [ 0.73705292,  0.13759996, -0.33590671, ...,  0.15150025,
        -0.2162281 , -0.36046752],
       [-0.90121216, -0.09728234, -0.40505442, ...,  0.02105984,
        -0.46720058, -0.49198067],
       [ 0.29820383,  0.80599529,  0.97673845, ..., -0.43288365,
        -0.73505884, -0.8707968 ]], dtype=float32)

lernen

for i in range(1000):
    #Daten zur Verwendung in Mini-Batch
    batch_xs, batch_ys = mnist.train.next_batch(100)
    #Update mit Farbverlauf
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

Ich habe die Daten in "x", "y_" eingefügt, die keinen bestimmten Wert hatten, und "W", "b" mit der angegebenen Lernmethode aktualisiert. Diese Prozedur wird natürlich auch über die Sitzung durchgeführt. Ich werde das machen.

verbleibend

#Definieren Sie eine Funktion, die den Prozentsatz der richtigen Antworten zurückgibt
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#Zeigen Sie die Ergebnisse an
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})

Ich suche die richtige Antwortrate.

Impressionen

Es ist Theano ziemlich ähnlich, aber ich denke, es ist etwas einfacher zu befestigen als Theano. (Theano * 2 + Chainer) / 3 Eindruck. TensorBoard sieht fantastisch aus, also möchte ich es berühren.

Recommended Posts

TensorFlow Tutorial MNIST Für ML-Anfänger
TensorFlow Tutorial -MNIST Für ML-Anfänger
Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
TensorFlow MNIST Für ML Anfänger Übersetzung
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
Ergänzende Hinweise zu TensorFlow MNIST für ML-Anfänger
[Übersetzen Sie das TensorFlow-Tutorial grob ins Japanische] 1. MNIST für ML-Anfänger
Ich habe das MNIST-Tutorial von tensorflow für Anfänger ausprobiert.
Ich habe das TensorFlow-Tutorial (MNIST für Anfänger) zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
[Übersetzen Sie das TensorFlow-Tutorial grob ins Japanische] 2. Deep MNIST For Experts
TensorFlow Tutorial Tutorial
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
TensorFlow Deep MNIST für Expertenübersetzung
Ich habe versucht, das TensorFlow-Tutorial mit Kommentaren auszuführen (_TensorFlow_2_0_Einführung für Anfänger).
TensorFlow Tutorial Ich habe MNIST 3rd ausprobiert
Django Tutorial Zusammenfassung für Anfänger von Anfängern ③ (Anzeigen)
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
Django Tutorial Zusammenfassung für Anfänger von Anfängern ⑤ (Test)
Mathematik für ML
[Erklärung für Anfänger] Grundlegende Syntax und Konzept von TensorFlow
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 ~)
Django Tutorial Zusammenfassung für Anfänger von Anfängern ④ (Generic View)
Installieren von TensorFlow unter Windows Easy für Python-Anfänger
Code für TensorFlow MNIST Anfänger / Experte mit japanischen Kommentaren
[Übersetzung] NumPy Official Tutorial "NumPy: die absoluten Grundlagen für Anfänger"
Spacemacs-Einstellungen (für Anfänger)
Python Lehrbuch für Anfänger
Erstellung eines MNIST-Bilderzeugungsprogramms durch DCGAN (Tensorflow-Tutorial)
Aktivieren Sie die GPU für den Tensorflow
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden
Installationshinweise für TensorFlow für Windows
Lernablauf für Python-Anfänger
[Für Anfänger] Kaggle-Übung (Merucari)
Empfohlene Linux-Distribution für Anfänger
CNN (1) zur Bildklassifizierung (für Anfänger)
Python3-Umgebungskonstruktion (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Seaborn Basics für Anfänger ④ Pairplot
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Kaggle-Anfänger] Titanic (LightGBM)
Linux Command Memorandum [für Anfänger]
Versuchen Sie TensorFlow MNIST mit RNN
Praktische Linux-Verknüpfung (für Anfänger)