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.
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.
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})
#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.
#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]))
#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.
#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.
#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)
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.
#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.
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