[PYTHON] [Einführung in Tensorflow] Verstehen Sie Tensorflow richtig und versuchen Sie, ein Modell zu erstellen

Dieser Artikel ist eine Übersetzung meines Blogs Data Science Struggle.

Zweck

Machen Sie sich eine ungefähre Vorstellung von Tensorflow und erstellen Sie ein einfaches Modell.

Umriss des Tensorflusses

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.

  1. Was ist Tensorflow? Zunächst kann man sich Tensorflow als einen Computer vorstellen, der automatisch Berechnungen durchführt, um die Parameter des neuronalen Netzes zu bestimmen, wenn es tatsächlich verwendet wird. Der *** Rechner *** führt hier buchstäblich die Berechnung durch, z. B. eine 1 + 1-Antwort.
  2. Wie ist Ihre Position beim maschinellen Lernen? Es gibt ungefähr drei Methoden, die maschinelles Lernen verwenden. Das erste ist ein Muster, in dem Sie in jeder Sprache Ihr eigenes Modell erstellen, nachdem Sie die Algorithmen und die Mathematik richtig verstanden haben. Das zweite ist ein Muster, das mit sklearn für Python und jeder Bibliothek ein Modell in wenigen Zeilen nach der Methode für R erstellt. Das dritte ist ein Muster, das Sie selbst mithilfe einer Berechnungsbibliothek erstellen, die zum Erstellen von Modellen für maschinelles Lernen geeignet ist.

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

So berechnen Sie den Tensorflow

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.

Tensorflow-Variablen

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.

Klassifizierung nach Tensorflow

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

[Einführung in Tensorflow] Verstehen Sie Tensorflow richtig und versuchen Sie, ein Modell zu erstellen
Machen wir einen Jupyter-Kernel
Probieren Sie TensorFlows RNN mit einem Basismodell aus
[Einführung in das SEIR-Modell] Versuchen Sie, COVID-19-Daten anzupassen ♬
Machen Sie einen Chat-Bot und üben Sie, beliebt zu sein.
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Erstellen Sie mit OpenCV und TensorFlow einen Sato Yohei-Diskriminator
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Sammeln Sie Druckfehlerinformationen von Toshiyuki Sakamoto "Machen und verstehen! Einführung in den Ensemble-Lernalgorithmus"
Einführung in Private TensorFlow
Eine super Einführung in Linux
Versuchen Sie, Python selbst zu verstehen
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
[Einführung in das Modell der Infektionskrankheiten] Ich habe versucht, zu passen und zu spielen ♬
Ein Hinweis zur TensorFlow-Einführung
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Versuchen Sie, eine Sprache auszuwählen
Versuchen Sie einfach, einen Webhook mit ngrok und Python zu erhalten
Eine Geschichte über die Portierung des Codes "Versuchen Sie zu verstehen, wie Linux funktioniert" nach Rust
Erstellen eines sequentiellen Tensorflow-Modells mit einem zu MNIST hinzugefügten Originalbild
Einführung in nichtparametrische Bayes 2 (Indian Buffet Process und Latent Feature Model)
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
[Einführung in Systre] Umtausch und Aktien: Verhalten während eines Absturzes ♬
Spigot (Papier) Einführung in die Erstellung eines Plug-Ins für 2020 # 01 (Umgebungskonstruktion)
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
So führen Sie einen Komponententest durch Teil 1 Entwurfsmuster zur Einführung
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Versuchen Sie, eine Blackjack-Strategie zu entwickeln, indem Sie das Lernen stärken ((1) Implementierung von Blackjack)
Der Versuch, Segmentbäume Schritt für Schritt zu implementieren und zu verstehen (Python)
Wie erstelle ich eine japanisch-englische Übersetzung?
Versuchen Sie, eine Bezier-Kurve zu zeichnen
[Einführung in Python3 Tag 1] Programmierung und Python
Einführung in TensorFlow - Hallo World Edition
Erstellen Sie mit TensorFlow eine Gesichtserkennung
Wie man einen lockeren Bot macht
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
So konvertieren Sie das Tensorflow-Modell in Lite
[Blender] So erstellen Sie ein Blender-Plug-In
Eine leichte Einführung in die Objekterkennung
Wie erstelle ich einen Crawler?
Erstellen Sie mit PySide einen Modelliterator
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 4] eine nervenschwächende Anwendung machen ~ MySQL-Konstruktion und DB-Migration mit Docker ~
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
2. Erstellen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (2. Grundlagen des Python-Programms)
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
So erstellen Sie mit YOLO in 3 Stunden ein Modell für die Objekterkennung
Versuchen Sie mit einem linearen Regressionsmodell auf Android [PyTorch Mobile] zu schließen
Versuchen Sie, mit Python (2) eine Erfassungssoftware zu erstellen, die so genau wie möglich ist.
Versuchen Sie, Foldl und Foldr mit Python: Lambda zu machen. Auch Zeitmessung
Ich habe das Schaben mit Selen gelernt, um ein Vorhersagemodell für Pferderennen zu erstellen.
Ich habe mir eine Möglichkeit ausgedacht, aus einem Foto ein 3D-Modell zu erstellen.