Dieser Artikel ist eine Übersetzung meines Blogs Data Science Struggle.
Machen Sie sich eine ungefähre Vorstellung von Tensorflow und erstellen Sie ein einfaches Modell.
Lassen Sie uns einen kurzen Blick darauf werfen, was Tensorflow an verschiedenen Orten zu hören ist und welche Position es beim maschinellen Lernen einnimmt.
*** Tensorflow ist der dritte. *** ***
Hier wird die tatsächliche Situation in Bezug auf die obigen drei kurz beschrieben. Wenn Sie tatsächlich die Mathematik des maschinellen Lernens gelernt haben, möchte ich einmal ein Modell erstellen, ohne von der Bibliothek usw. abhängig zu sein, um die Mathematik und den Mechanismus zu bestätigen und das Umschreiben flexibler zu gestalten. Es ist jedoch oft unpraktisch, alle Modelle auf diese Weise für jede Situation zu erstellen, und eine Neuentwicklung der Räder ist verschwenderisch. In der Realität lernen Sie daher, wie Sie die Bibliothek für maschinelles Lernen verwenden und mit dem Problem umgehen. Die meisten Bibliotheken sind sehr nützlich, und Sie können Ihr Ziel in nur wenigen Zeilen erreichen, wenn Sie nur modellieren möchten. Es kann jedoch Situationen geben, in denen eine solche Bibliothek schwierig zu handhaben ist. Neuronale Netze sind ein Beispiel. Nicht nur die Anzahl der Zwischenschichten, sondern auch die Methode des Verbindens und der Datenunterbrechung kann alles getan werden, solange bestimmte Regeln eingehalten werden. Es ist schwierig, eine Bibliothek für maschinelles Lernen zu verwenden, um solche Dinge zu erstellen, aber es gibt so viel zu befürchten, alles selbst zu erstellen.
Computerbibliotheken für maschinelles Lernen wie Tensorflow lösen die oben genannte Situation. Erstens ist es keine Bibliothek für maschinelles Lernen, die ein Modell in einer Zeile erstellt. *** Eine Bibliothek, mit der Benutzer ihre eigenen Modelle erstellen können ***. Mit anderen Worten, es unterscheidet sich von einer Bibliothek für maschinelles Lernen, die verwendet werden kann, ohne den Mechanismus überhaupt zu kennen, und es ist schwierig, sie zu verwenden, ohne zumindest zu wissen, wie ein Modell erstellt wird.
Lassen Sie uns sehen, wie Tensorflow eine Bibliothek ist, die die Berechnungen durchführt. Zunächst wird die folgende Berechnung von Tensorflow durchgeführt.
5 + 3
Wenn dies durch Tensorflow gelöst wird, wird es so.
add.py
import tensorflow as tf
a = tf.constant(5)
b = tf.constant(3)
added = tf.add(a, b)
with tf.Session() as sess:
print sess.run(added)
Hier, wenn Sie versuchen, normal hinzugefügt zu drucken,
Tensor("Add_1:0", shape=(), dtype=int32)
Wird ausgegeben. Bei richtiger Interpretation ist das Hinzufügen keine konkrete Zahl, sondern eine Berechnungsform, die die Summe von a und b ist. Die eigentliche Berechnung erfolgt, wenn sie in der Sitzung ausgeführt wird. Es wird____geben. Diese *** Formularinformation *** wird in Tensorflow als *** Graph *** bezeichnet.
Wir haben oben eine einfache Tensorflow-Berechnungsmethode gesehen, aber es gibt noch eine Sache, über die wir uns Sorgen machen müssen. Das ist eine Variable. Da es sich um eine Berechnungsbibliothek handelt, die beim maschinellen Lernen verwendet wird, ist es wichtig, mehrere Dimensionen gleichzeitig zu verarbeiten und, wie oben erwähnt, nach dem Erstellen eines *** Diagramms *** die eigentliche Berechnung per Lauf durchzuführen. Es ist praktisch, den Wert angeben zu können, der der Variablen später gegeben werden soll. Tatsächlich verfügt Tensorflow über diese Funktion. Zusammenfassend hat *** Tensorflow mehrere Dimensionen, Konstanten und temporäre Variablen, die später Zuweisungen akzeptieren ***. Variablen können wie folgt definiert werden.
#Konstante
a = tf.constant(3)
#Variable
b = tf.Variable(0)
#Platzhalter
c = tf.placeholder(tf.float32)
Insbesondere, wenn Sie versuchen, mithilfe von Platzhaltern zu berechnen
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
added = tf.add(a, b)
with tf.Session() as sess:
print sess.run(added, feed_dict = {a: 3.0, b: 5.0})
Im obigen Beispiel ist bis hinzugefügt ein Diagramm, und ein bestimmter Wert wird von feed_dict in der Ausführungsphase angegeben, um die Berechnung durchzuführen.
Lassen Sie uns die Irisdaten mithilfe des Tensorflusses klassifizieren. Ab diesem Zeitpunkt wird die gesamte Phase in zwei Teile unterteilt: *** Erstellung von Konstruktionszeichnungen *** und *** Erstellung ***.
*** Erstellen einer Konstruktionszeichnung *** ist der Teil der Art des zu erstellenden Modells und Diagramms.
*** Erstellen *** bezieht sich auf das Definieren der Parameter in der Konstruktionszeichnung durch Eingabe von Daten in die obige Konstruktionszeichnung.
Unten finden Sie ein Codebeispiel für die Irisklassifizierung.
Darüber hinaus in den Daten
https://dl.dropboxusercontent.com/u/432512/20120210/data/iris.txt
Verwenden Sie die von heruntergeladene.
get_data.py
import pandas as pd
import tensorflow as tf
from sklearn import cross_validation
data = pd.read_csv('https://dl.dropboxusercontent.com/u/432512/20120210/data/iris.txt', sep = "\t")
data = data.ix[:,1:]
train_data, test_data, train_target, test_target = cross_validation.train_test_split(data.ix[:,['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width']], data.ix[:,['Species']], test_size = 0.4, random_state = 0)
Mit dem obigen Code werden Irisdaten erfasst und in Trainingsdaten und Testdaten unterteilt. In Zukunft werden wir ein Modell mit den gepaarten Daten von train_data und train_target erstellen. Die Antwort, wenn train_data angegeben wird, lautet train_target. Da es in Zug und Test unterteilt ist, sollte es natürlich mit Testdaten durchgeführt werden, aber diesmal wird es weggelassen. Daraus erstellen wir tatsächlich eine Konstruktionszeichnung und bauen darauf auf.
classify.py
#Konstruktionszeichnung
#Platzhaltereinstellungen
X = tf.placeholder(tf.float32, shape = [None, 4])
Y = tf.placeholder(tf.float32, shape = [None, 3])
#Parametereinstellung
W = tf.Variable(tf.random_normal([4, 3], stddev=0.35))
#Aktivierungsfunktion
y_ = tf.nn.softmax(tf.matmul(X, W))
#Bauen
#Verlustfunktion
cross_entropy = -tf.reduce_sum(Y * tf.log(y_))
#Lernen
optimizer = tf.train.GradientDescentOptimizer(0.001)
train = optimizer.minimize(cross_entropy)
#Lauf
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
for i in range(1000):
x = train_data
y = pd.get_dummies(train_target)
print(sess.run(W))
sess.run(train, feed_dict = {X: x, Y: y})
test = sess.run(W)
Schauen wir uns jeden an. Erstellen Sie zunächst eine Konstruktionszeichnung. Wenn die Matrix der erklärenden Variablen X ist, die Matrix der erklärten Variablen Y ist und das Gewicht W ist, kann diese Konstruktionszeichnung wie folgt ausgedrückt werden. Der Bias-Term wird diesmal nicht verwendet.
X = [None, 4]\\
W = [4, 3]\\
Y = [None, 3]\\
[None, 4] \times [4, 3] = [None, 3]\\
[Keine, 3] in der obigen Gleichung stimmt mit Y überein. Fahren Sie tatsächlich mit dem Code fort.
placeholder.py
#Platzhaltereinstellungen
X = tf.placeholder(tf.float32, shape = [None, 4])
Y = tf.placeholder(tf.float32, shape = [None, 3])
Legen Sie einen Platzhalter fest. X und Y, die hier eingestellt sind, zeigen auf die erklärende Variable bzw. die erklärte Variable in den Daten, und die Daten werden in den Teil nach *** eingegeben. Die Irisdaten haben vier erklärende Variablen und drei zu klassifizierende Klassen. Da die beim Zuführen von Daten angegebene Anzahl (die Anzahl der Zeilen im Datenrahmen) unbekannt ist, geben Sie dort None ein.
parameter.py
#Parametereinstellung
W = tf.Variable(tf.random_normal([4, 3], stddev=0.35))
Stellen Sie den Parameterteil ein, dh das Gewicht. Im Build-Teil wird dieser Parameter W durch Eingabe von Daten aktualisiert und bestätigt. In den Teilen tf.random_normal und stddev werden Zufallszahlen angegeben, die der angegebenen Verteilung folgen. Es gibt verschiedene Möglichkeiten, sie zu geben, daher sollten Sie sich jede ansehen.
activate.py
#Aktivierungsfunktion
y_ = tf.nn.softmax(tf.matmul(X, W))
Bestimmen Sie die Aktivierungsfunktion. Es ist notwendig, eine geeignete Funktion entsprechend der Form der Ausgabe auszuwählen, unabhängig davon, ob es sich um eine Zwischenschicht oder eine Ausgangsschicht handelt. In diesem Fall ist dieses y_ die endgültige Ausgabe für die Eingabe.
Darüber hinaus ist der Build-Teil. Tensorflow macht die kniffligen Berechnungen gut, aber Sie müssen die Zusammensetzung Ihrer Arbeit verstehen. Wenn die Zusammensetzung des Bauteils angemessen beschrieben wird, bedeutet dies, dass *** eine Verlustfunktion definiert und die Parameter aktualisiert werden, so dass der Verlust kleiner wird ***. Die Genauigkeit der Vorhersage hängt vom Wert des oben definierten Parameters W ab. Ändern Sie die Parameter so, dass die Vorhersage so genau wie möglich ist. Zu dieser Zeit konzentrierten wir uns nicht auf *** wie genau ***, sondern auf *** wie wenige Fehler *** und aktualisierten die Parameter so, dass weniger Fehler auftraten. Es bedeutet zu gehen.
lost.py
#Verlustfunktion
cross_entropy = -tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_, Y)
Diese Verlustfunktion ist der Teil von *** wie wenigen oben erwähnten Fehlern ***. Die Verlustfunktion unterscheidet sich je nachdem, ob das zu erstellende Modell eine Klassifizierung oder eine Regression ist. Dies sollte untersucht werden, da Tensorflow mehrere Verlustfunktionen hat.
train.py
#Lernen
optimizer = tf.train.GradientDescentOptimizer(0.001)
train = optimizer.minimize(cross_entropy)
Das Optimierungsprogramm definiert, wie die Parameter basierend auf den Daten tatsächlich aktualisiert werden. Im Zug wird die Verlustfunktion basierend auf der vom Optimierer angegebenen Aktualisierungsmethode klein gemacht (Parameteraktualisierung).
execute.py
#Lauf
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
x = train_data
y = pd.get_dummies(train_target)
print(sess.run(W))
sess.run(train, feed_dict = {X: x, Y: y})
Machen Sie hier einen konkreten Bau. Dieses Mal habe ich es übersprungen und alle Daten 1000 Mal als eine Einheit gelesen. Im Teil von sess.run () werden dem Platzhalterteil von feed_dict konkrete Daten übergeben. Auf diese Weise suchen wir nach Parametern, die die Verlustfunktion lokal minimieren und W aktualisieren. In der Realität wird häufig der Grad des Verlusts abgeschrieben.
Recommended Posts