Lesen wir zunächst Erste Schritte. Introduction | TensorFlow
Plötzlich kommt der Beispielcode von TensorFlow heraus, aber hier zeigt er, wie einfach es ist, ein Modell unter Verwendung der Beispieldaten zu erstellen. Wenn Sie überhaupt keine Kenntnisse über maschinelles Lernen haben, werden Sie die Bedeutung nicht verstehen.
Wenn Sie sich verschiedene TensorFlow-Artikel ansehen, werden Sie vielleicht feststellen, dass Sie kein maschinelles Lernwissen haben, aber TensorFlow ist nur ein Werkzeug, daher denke ich, dass es besser ist, das Mindestwissen für die Zukunft zu haben.
Als nächstes wird empfohlen, die Daten herunterzuladen, indem Sie an der traditionellen MNIST (Handwritten Character Recognition) arbeiten. Wenn Sie keine Erfahrung mit MNIST haben, empfehlen wir "blaue Medizin". Wenn Sie in gewissem Maße an maschinelles Lernen gewöhnt sind, wird "rote Medizin" empfohlen, damit Sie ohne zu zögern "rote Medizin" erhalten können.
Weil ich einen Monat lang maschinelles Lernen studiert habe.
Also bemerkte ich hier, dass ich sagte "Lass es uns mit MNIST versuchen", aber ich hatte TensorFlow noch nicht einmal installiert. Dieser Einstieg ist nicht in sehr gutem Zustand. Die Installation und Erläuterung des ersten Beispielcodes scheint für einen Qiita 1-Artikel ausreichend zu sein, sodass MNIST dies zu einem anderen Zeitpunkt tun wird.
TensorFlow install on Mac OS X
(Referenz) Download and Setup | TensorFlow
Es heißt, wenn Sie eine GPU verwenden ..., aber jetzt möchte ich mich auf das Studium des maschinellen Lernens konzentrieren, damit ich nicht über andere Umgebungskonstruktionen stolpere und keine GPU-Umgebung erstelle. Ich werde alles rund um den Aufbau der GPU-Umgebung überspringen.
Ich tat dies, weil es einfach schien, mich in der Umgebung von Virtualenv vorzubereiten, die ich jetzt habe.
% virtualenv --system-site-packages ~/env/tensorflow
In der Site-Installationsprozedur war das Verzeichnis, in dem die Umgebungseinstellungen gespeichert sind, "~ / tensorflow", aber ich habe die Umgebung in "~ / env" organisiert, also habe ich es wie oben gemacht. Bitte ändern Sie dies entsprechend Ihrer Umgebung.
% source ~/env/tensorflow/bin/activate
Jetzt sieht Ihre Konsole so aus und Sie können die Umgebung auf den Tensorflow vorbereiten, ohne andere Umgebungen zu verschmutzen. Wir werden hier Tensorflow installieren.
(tensorflow) %
Befolgen Sie die Anweisungen auf der Website
(tensorflow) % export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py3-none-any.whl
(tensorflow) % pip3 install --upgrade $TF_BINARY_URL
Damit ist die Installation abgeschlossen. Überprüfen Sie den folgenden Vorgang, und wenn kein Problem vorliegt, ist dies in Ordnung.
(tensorflow) % python
...
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
Nun war der Beispielcode, der plötzlich bei Erste Schritte präsentiert wurde, ein einfacher linearer Regressionscode. Ich möchte dies ausführlich erläutern und gleichzeitig die lineare Regression erläutern.
Da es kurz ist, habe ich den gesamten Code gepostet.
import tensorflow as tf
import numpy as np
# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3
# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will
# figure that out for us.)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# Before starting, initialize the variables. We will 'run' this first.
init = tf.global_variables_initializer()
# Launch the graph.
sess = tf.Session()
sess.run(init)
# Fit the line.
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
# Learns best fit is W: [0.1], b: [0.3]
# Close the Session when we're done.
sess.close()
Der Code enthält Kommentare, aber ich denke, es ist besser, etwas detaillierter zu sein, deshalb erkläre ich das auch.
import tensorflow as tf
import numpy as np
# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3
Wenn Sie eine lineare Regression durchführen möchten, bereiten Sie ursprünglich Trainingsdaten aus tatsächlichen Daten vor. Da es sich jedoch um ein Lernprogramm handelt, haben wir ungefähr 100 Trainingsdaten generiert, deren Verteilung im Voraus vorhergesagt werden kann. Zunächst werden 100 Punkte von x unter Verwendung der Zufallsfunktion von numpy vorbereitet, die als x_data bezeichnet wird, und 100 Punkte von y_data in dem entsprechenden Diagramm werden ebenfalls vorbereitet. Mit anderen Worten, die Trainingsdaten variieren nicht und sind alle auf $ y = \ frac {1} {10} x + \ frac {3} {10} $.
Wenn Sie dies in Form von $ y = W x + b $ modellieren, sind $ W = 0,1 $ und $ b = 0,3 $ selbstverständlich, aber es wird als "lineare Regression mit TensorFlow unter Verwendung dieser Punkte als Trainingsdaten" beschrieben. Machen] Das ist der Zweck dieses Tutorials.
# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will
# figure that out for us.)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
Wobei W = ... den Anfangswert von W ergibt. Wobei b = ... den Anfangswert von b ergibt.
In einem neuronalen Netzwerk usw. ist es notwendig, W eine kleine Zufallszahl zu geben, um die Symmetrie zu brechen, aber in der linearen Regression kann der Anfangswert von W sowohl tf.zeros ([1]) als auch b ([1]) sein. Das Ergebnis ist das gleiche). Da der Beispielcode diesmal verwendet wird, wird er mit einer Zufallszahl initialisiert.
y = ... ist eine Menge von y-Punkten, die von diesem Modell ausgegeben werden und x_data entsprechen. Mit anderen Worten, es ist eine hypothetische Funktion.
Und
# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
Nun wollen wir $ W $ und $ b $ auswählen, damit die Vorhersage des obigen Modells den geringsten Fehler mit den tatsächlichen Daten aufweist. Definieren Sie also zuerst den Fehler. Der Fehler an einem bestimmten Punkt wird durch das Quadrat der Differenz zwischen den vorhergesagten Daten y und den tatsächlichen Daten y_data definiert, und der Durchschnitt der Fehler an allen Punkten wird als Verlust definiert.
Lassen Sie uns hier die Kostenfunktion der linearen Regression erneut bestätigen.
Der Verlust ist die Python-Darstellung dieses $ J (\ theta) $ mit TensorFlow. ($ \ Frac {1} {2} $ wird weggelassen, da es für die Minimierung nicht relevant ist.)
Als nächstes definieren wir den Optimierer. Hier entscheiden Sie, welchen Algorithmus Sie verwenden möchten, um die Kosten zu minimieren. Derzeit wird GradientDescentOptimizer angegeben, da es die Methode mit dem steilsten Abstieg unter den in TensorFlow bereitgestellten Algorithmen verwendet. Das Argument 0,5 ist die Lernrate. Ursprünglich sollte ich verschiedene Werte ausprobieren, aber diesmal um 0,5 herum funktioniert es gut, also habe ich 0,5 angegeben.
Klicken Sie hier für die Lernrate (= Lernkoeffizient) [Praktisches Niveau des maschinellen Lernens in einem Monat # 4 (lineare Regression)](http://qiita.com/junichiro/items/d4dc67bdebb9fccb7ef5#%E5%AD%A6%E7%BF%92%E4%BF % 82% E6% 95% B0)
Informationen zum vorbereiteten Optimierer finden Sie in der Dokumentation. Optimizers | TensorFlow
Und schließlich fordert uns dieser Optimierer auf, den Verlust zu minimieren.
# Before starting, initialize the variables. We will 'run' this first.
init = tf.global_variables_initializer()
Tatsächlich macht TensorFlow bisher nichts mit dem Code. Alles was Sie tun müssen, ist verschiedene Einstellungen vorzunehmen und vorzubereiten. Danach wird das Lernen tatsächlich ausgeführt, indem run ausgeführt wird. Zuvor werden hier jedoch verschiedene Werte initialisiert.
Übrigens, wenn es sich um einen kleinen alten Einführungsartikel handelt, beachten Sie bitte, dass es Fälle gibt, in denen hier "initialize_all_variables" verwendet wird. Es ist veraltet, daher gibt es keinen Grund, es erneut zu verwenden.
(Referenz) TensorFlow initialize_all_variables ist veraltet
# Launch the graph.
sess = tf.Session()
sess.run(init)
# Fit the line.
for step in range(201):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(W), sess.run(b))
# Learns best fit is W: [0.1], b: [0.3]
# Close the Session when we're done.
sess.close()
Der letzte ist die Ausführungsphase. TensorFlow trainiert in der Sitzung gemäß den obigen Einstellungen. In diesem Beispiel wird die Anzahl der Iterationen auf 200 ("Bereich (201)") eingestellt, und der Prozess des Minimierens der auf "Zug" voreingestellten Kostenfunktion wird wiederholt ausgeführt. Der Status wird überprüft, indem alle 20 Schritte eine Ausgabe an die Konsole gesendet wird.
0 [ 0.17769754] [ 0.34861392]
20 [ 0.1106104] [ 0.29447961]
40 [ 0.10272982] [ 0.29857972]
60 [ 0.10070232] [ 0.29963461]
80 [ 0.10018069] [ 0.29990602]
100 [ 0.1000465] [ 0.29997581]
120 [ 0.10001197] [ 0.29999378]
140 [ 0.10000309] [ 0.2999984]
160 [ 0.1000008] [ 0.29999959]
180 [ 0.10000021] [ 0.29999989]
200 [ 0.1000001] [ 0.29999995]
Es ist nicht sehr interessant, aber wenn Sie die Iterationen wiederholen, können Sie sehen, dass es allmählich zu $ W = 0,1 $ und $ b = 0,3 $ konvergiert.
Sobald Sie dies wissen, denke ich, ist es nicht allzu schwierig, das allgemeine lineare Regressionsproblem anzuwenden. Sie können es sofort verwenden. Ich denke, dass der Umgang mit Klassifizierungsproblemen wie der logistischen Regression problemlos gelöst werden kann, indem der Kostenfunktion nur eine weitere Wendung hinzugefügt wird.
Wenn möglich, würde ich es gerne mit einem neuronalen Netzwerk üben. Das neuronale Netzwerk wird wahrscheinlich in "traditioneller MNIST (handschriftliche Zeichenerkennung)" verwendet, was ich diesmal nicht getan habe, daher würde ich es gerne so schnell wie möglich sehen.
Nachtrag: Ich habe es geschrieben! Einführung in TensorFlow ~ Petit-Anwendung von MNIST für Anfänger ~ Ich habe das TensorFlow-Tutorial "Traditionelle MNIST (Handwritten Character Recognition)" mit einer kleinen Erweiterung meines eigenen Wissens ausprobiert. Im Tutorial wird die Softmax-Funktion für die Kostenfunktion und die stochastische Gradientenmethode zur Minimierung verwendet. Sie können dies jedoch verstehen, indem Sie sie durch die mit der Sigmoid-Funktion oder die mit der Methode mit dem steilsten Abstieg ersetzen. Ich vertiefe mich.
Andere einführende Artikel zu TensorFlow, auf die ich mich bezog
Ich würde so etwas gerne in Zukunft machen.
Recommended Posts