Ich habe [TensorFlow Official Tutorial] ausprobiert (https://www.tensorflow.org/versions/r0.12/tutorials/mnist/beginners/)
mnist_softmax Ein Programm, das handgeschriebene Zeichen schätzt 60000 Trainingsdaten 10000 Testdaten Eingabe sind Bilddaten 784 (28 * 28)
Geben Sie X Zeilen 784 Spalten 1 ein Gewicht W Reihe Trainingsdatennummer Spalte 784 Bias b Zeile 10 Spalten 1 y = Softmax (W ・ x + b)
Matrix-Multiplikation matmul()
Das Establishment ausdrücken Das Klassifizierungsergebnis wird als Funktion der Eingabedaten erhalten Aktivierungsfunktion mit der Summe aller Ausgänge von 1 y1, y2 ... y10 (repräsentiert die Wahrscheinlichkeit der Zahlen 0-9)
Die richtige Antwort wird durch 0 und 1 dargestellt
Finden Sie das Gewicht (w) und die Vorspannung (b), damit die Etikettendaten und die Ausgabe von Softmax so nah wie möglich sind.
Als Kostenfunktion (Fehler) Berechnen Sie die Abweichung zwischen dem geschätzten Wert und dem richtigen Antwortetikett
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
Bereiten Sie einen leeren Behälter mit "Platzhalter" vor Variable "Variable"
x = tf.placeholder(tf.float32, [None,784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
Die Ausgabe besteht aus 10 Elementen, insgesamt 1.
y = tf.nn.softmax(tf.matmul(x,W) + b)
Berechnen Sie, wie weit der Unterschied zwischen "y" und "y_" in cross_entropy ist
redu_mean
(Durchschnitt)
Summe reduzieren
(gesamt)
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
Gewichte optimieren und aktualisieren
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
Trainiere mit zufälligen Daten für 100 Chargen. 1000 mal wiederholen.
Extrahieren Sie 100 Daten im Zug.
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
train_step
Angegeben durch SGD (Gradientenabstiegsmethode)
feed_dict = {x: batch_xs, y_: batch_ys}
Datenquelle, x ist x von Batch, y ist y von Batch
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
Vergleicht die "gleich" -Ausgabe mit der richtigen Bezeichnung und gibt True und False zurück.
argmax (y, 1)
Extrahiert das größte Element der Ausgabe.
redu_mean
Durchschnittliche Genauigkeit
cast
True, Konvertiere False in eine Zahl (Verhältnis)
Zum Schluss mit Testdaten auswerten
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_ : mnist.test.labels}))
Abschließend wird eine Zusammenfassung des bisherigen Ablaufs beschrieben.
mnist_softmax.py
# coding: utf-8
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
x = tf.placeholder(tf.float32, [None,784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for _ in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_:batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_ : mnist.test.labels}))
Recommended Posts