Google hat ein Tool für maschinelles Lernen "TensorFlow" veröffentlicht, daher habe ich sofort ein Tutorial ausprobiert.
Installieren Sie wie folgt.
$ pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
Bisher scheint es nur Python2 zu unterstützen, und als ich versuchte, es auch in Python3 zu installieren, schlug es fehl. Abhängigkeiten wie numpy werden ebenfalls automatisch installiert.
Unten habe ich versucht, es zu implementieren, während ich auf der offiziellen Website geschrieben habe, was in "MNIST für ML-Anfänger" steht. (Beachten Sie, dass input_data keine Funktion von tensorflow ist, aber die in hier ist input_data. Muss als .py gespeichert werden.)
# -*- coding : utf-8 -*-
import tensorflow as tf
import input_data
#mnist Datenerfassung)
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
#Definieren Sie einen Platzhalter für Eingabeinformationen.
# shape(2. Argument)Wenn für die Dimension von Keine angegeben ist, kann eine beliebige Anzahl von Dimensionen beliebiger Länge unterstützt werden.
x = tf.placeholder("float", [None, 784])
#Definieren Sie eine Variable, die Gewichte und Verzerrungen enthält.
#Variable ist eine Variable, deren Wert durch Operation geändert werden kann.
W = tf.Variable(tf.zeros([784, 10])) #Gewicht 784 Nimmt eine dimensionale Eingabe auf und gibt eine 10-dimensionale Ausgabe zurück
b = tf.Variable(tf.zeros([10])) #Vorspannung für 10-dimensionale Ausgabe
#Definieren Sie ein neuronales Netzmodell.
#Matrixprodukt aus Eingabe x und Gewicht W.(tf.matmul)Die Vorspannung b wird zur Ausgabe von addiert, und die endgültige Ausgabe wird durch Softmax bestimmt.
y = tf.nn.softmax(tf.matmul(x, W) + b)
#Dies ist das Ende der Definition des neuronalen Netzmodells.
#Das Folgende ist die Durchführung von Schulungen und Evaluierungen
# (In diesem Beispiel lernen wir durch Auswertung mit Kreuzentropie.)
#Lehrerdaten(Richtige Antwort)Definieren Sie einen Platzhalter zum Halten.
y_ = tf.placeholder("float", [None, 10])
#Definieren Sie die Formel zur Berechnung der Kreuzentropie.
#Lehrerdaten y_Und die Logarithmus der Ausgabe y aus dem Modell, und berechnen Sie die Gesamtsumme
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
#Definieren Sie, wie das Modell bei jedem Schritt aktualisiert werden soll.
#0 für jeden Schritt.Minimieren Sie die Kreuzentropie mit einer Aktualisierungsrate von 01.
# (Die Fehlerrückausbreitungsmethode wird zum Erlernen des neuronalen Netzes verwendet, dies scheint jedoch anhand des Modells beurteilt zu werden.)
# (Hier, y= tf.nn.softmax(...)Daher scheint es, dass das Fehlerrückausbreitungsverfahren zum Aktualisieren des neuronalen Netzes angewendet wird.)
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
#Bereiten Sie die Initialisierung aller Variablen vor.
init = tf.initialize_all_variables()
#Definieren Sie eine Sitzung und initialisieren Sie alle Variablen.
sess = tf.Session()
sess.run(init)
#Trainiere
#Übergeben Sie die wichtigsten Daten zur Schulung und zum Training an die Sitzung_Aktualisieren Sie das Modell gemäß der Definition von Schritt.
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})
#Definieren Sie eine Bewertungsformel für die Leistungsbewertung.
#Modellausgabe y und Lehrerdaten y für Eingabedaten_Überprüfen Sie, ob sie übereinstimmen.
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
#Es ist definiert, dass die endgültige Leistungsbewertung durch den Durchschnittswert bestimmt wird.
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
#Bewerten Sie die Leistung anhand der Testdaten und ihrer Etiketten.
print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
Was ich über die Implementierung dachte, war großartig als Werkzeug für maschinelles Lernen, aber ich fand es sehr gut als Werkzeug für die numerische Analyse. Eindruck, dass die Matrixberechnung einfach definiert werden kann und die Berechnungsgeschwindigkeit schnell ist. Die Implementierung der Lernmaschine ist im Vergleich zu anderen Bibliotheken ziemlich einfach, aber dieses Tutorial allein enthält viele Black Boxes, was mich ein wenig beunruhigt hat. In einigen offiziellen Tutorials geht es um tiefes Lernen, daher möchte ich das auch versuchen.
Recommended Posts