[PYTHON] Wahrscheinlich die einfachste Einführung in TensorFlow

Ich habe TensorFlow ausprobiert

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

Erklärung der linearen Regression

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.

Was versuchen Sie mit diesem Code zu tun?

  1. Bereiten Sie ungefähr 100 Punkte auf der geraden Linie vor, die durch $ y = \ frac {1} {10} x + \ frac {3} {10} $ dargestellt wird.
  2. Führen Sie eine lineare Regression durch, indem Sie sie als Trainingsdaten verwenden
  3. Definieren Sie ein Modell in der Form $ y = W x + b $ und führen Sie mit TensorFlow eine lineare Regression durch, um die Parameter $ W $ und $ b $ zu erhalten.
  4. Stellen Sie sicher, dass $ W $ und $ b $ nahe an $ \ frac {1} {10} (= 0.1) $ bzw. $ \ frac {3} {10} (= 0.3) $ liegen.

Codekommentar

Importieren Sie die erforderlichen Bibliotheken

import tensorflow as tf
import numpy as np

Vorbereitung der Trainingsdaten

# 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.

Modelldefinition der linearen Regression

# 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.

y = h_\theta(x)

Und $ h_\theta(x) = W x + b $ Ist das.

Definition der Kostenfunktion

# 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.

J(\theta) = \frac{ 1 }{ m }\sum_{ i = 1 }^{ m }\frac{ 1 }{ 2 }(h_\theta(x^{ (i) }) - y^{ (i) })^2

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.

Initialisierung vor der Ausführung

# 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

Ausführungsphase

# 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.

Ergebnis

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.

(Referenz) Praktisches Niveau des maschinellen Lernens in einem Monat # 7 (Klassifizierungsproblem: Logistische Regression # 1)

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.

Referenz

Andere einführende Artikel zu TensorFlow, auf die ich mich bezog

von jetzt an

Ich würde so etwas gerne in Zukunft machen.

Recommended Posts

Wahrscheinlich die einfachste Einführung in TensorFlow
Einführung in Private TensorFlow
Einführung in TensorFlow - Hallo World Edition
[Einführung in Python] Was ist Python, die derzeit leistungsstärkste Programmiersprache?
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
Einführung in Scrapy (1)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
Einführung in Tkinter 1: Einführung
Die Ungenauigkeit von Tensorflow war auf log (0) zurückzuführen.
[Einführung in AWS] Das erste Lambda ist Transcribe ♪
Einführung in PyQt
Einführung in Scrapy (2)
[Einführung in TensorBoard] Visualisieren Sie die TensorFlow-Verarbeitung, um das Verständnis zu vertiefen
[Linux] Einführung in Linux
[Einführung in Python3 Tag 20] Kapitel 9 Enträtseln des Webs (9.1-9.4)
Einführung in Python mit Atom (unterwegs)
Einführung in Scrapy (4)
Einführung in discord.py (2)
[Einführung in den Algorithmus] Finden Sie den kürzesten Weg [Python3]
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
Tag 66 [Einführung in Kaggle] Die einfachste Titanic-Vorhersage
Eine grobe Einführung in die neuronale maschinelle Übersetzungsbibliothek
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Einführung in die Udemy Python3 + -Anwendung] 27. Verwendung des Wörterbuchs
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
[Einführung in Python] Wie stoppe ich die Schleife mit break?
[Einführung in RasPi4] Umgebungskonstruktion; OpenCV / Tensorflow, japanische Eingabe ♪
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
[Einführung in TensorBoard: image] TensorFlow Visualisieren Sie die Bildverarbeitung, um das Verständnis zu vertiefen
Einführung in Lightning Pytorch
Einführung in nichtparametrische Felder
Einführung in EV3 / MicroPython
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
Einführung in PyQt4 Teil 1
Der Weg nach Pythonista
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Der Weg nach Djangoist
Einführung in das maschinelle Lernen
[TensorFlow] Ich möchte die Indizierung für Ragged Tensor beherrschen
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Eine Einführung in die Objektorientierung: Ändern Sie den internen Status eines Objekts
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
[Erklärung für Anfänger] Einführung in die Pooling-Verarbeitung (erklärt in TensorFlow)
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
Eine Einführung in die moderne Socket-API zum Erlernen in C.
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
[Einführung in Tensorflow] Verstehen Sie Tensorflow richtig und versuchen Sie, ein Modell zu erstellen
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~