[PYTHON] Einführung in Private TensorFlow

Einführung in Private Chainer Ich beschloss, mit Ikioi fortzufahren. Anstatt jedoch den Chainer zu beherrschen, möchte ich die Dinge durcheinander bringen. Deshalb ist es TensorFlow.

Weitere Informationen finden Sie unter MNIST für ML-Anfänger.

MNIST in Einführung in Private Chainer und Handschriftliche Zeichenerkennung mit KNN in Python Die Verwendung dieser Funktion zum "Erstellen eines Zahlendiskriminators" ist jedoch die Grundlage des Lernprogramms für maschinelles Lernen. Mit anderen Worten, es ist wie wenn eine Person, die neu in der Oracle-Datenbank ist, aus der SQL-Anweisung eingibt, die die scott / tiger emp-Datenbank auswählt.

Aus der Herstellung von TensorFlow

Verwenden Sie TensorFlow von Python. Da die Python-Umgebung mit Anaconda erstellt wurde, installieren Sie sie wie folgt gemäß Dokumentation.

% conda install -c conda-forge tensorflow

Damit ist die Installation abgeschlossen.

Zurück zu MNIST für ML-Anfänger

Führen Sie den folgenden Code aus, ohne den Grund zu kennen.

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

Als ich es mit ipython ausführte, wurde es vorerst wie folgt.

In [1]: from tensorflow.examples.tutorials.mnist import input_data

In [2]: mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
Extracting MNIST_data/train-images-idx3-ubyte.gz
Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz

Anscheinend wurden die Daten heruntergeladen.

% % ls -s1 MNIST_data/
total 22672
 3224 t10k-images-idx3-ubyte.gz
   16 t10k-labels-idx1-ubyte.gz
19368 train-images-idx3-ubyte.gz
   64 train-labels-idx1-ubyte.gz

MNIST-Implementierung in TensorFlow

Laut MNIST für ML-Anfänger ist das handgeschriebene 28x28-Pixel-Zahlenbild entweder 0-9, ebenso wie das Chainer-Tutorial. Gibt es? Wird durch die lineare Gleichung von y = Wx + b ausgewertet. Der Unterschied besteht darin, dass im Chainer-Tutorial das, was chainer.links.Linear () war, mithilfe von Softmax Regression ausgewertet werden sollte. Ich verstehe den Unterschied in diesem Bereich nicht, weil ich nicht genug gelernt habe.

Laut Tutorial betragen die Bilddaten 28 x 28 Pixel pro Zahl, dies sind jedoch die eindimensionalen 28 x 28 = 784 Array-Daten. Es scheint zu denken, dass es ist, und anzunehmen, dass es 55.000 gibt. Das heißt, es wird angenommen, dass alle Daten eine Matrix aus 784 Zeilen × 55000 Spalten sind, und dies ist mnist.train.xs. Die Beschriftung jeder Spalte (dh die Angabe, welche von 0 bis 9 jede Spalte ist?) Wird als Matrix aus 10 Zeilen × 55000 Spalten gehalten, und die Sohle lautet mnist.train.ys. Warum 10 Zeilen? Apropos, 0 ist [1,0,0,0,0,0,0,0,0,0] und 3 ist [0,0,0,1,0,0,0,0,0,0] Es scheint, dass es ist, weil es ausgedrückt wird als.

Daten lesen und Ausdrücke definieren

import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])

Definieren Sie zunächst die Daten von 784 Spalten als Platzhalter.

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

Definieren Sie die zu lernenden Parameter als Variable.

Definieren Sie dann das Modell.

y = tf.nn.softmax(tf.matmul(x, W) + b)

matmul () ist eine Matrixmultiplikation. Hier kann y durch Softmax-Regression erhalten werden. Beachten Sie, dass y eine 10-Zeilen-Matrix ist, die wie folgt dargestellt ist.

<tf.Tensor 'Softmax_1:0' shape=(?, 10) dtype=float32>

Vorbereitung für die Optimierung

y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

Um diese cross_entropy zu minimieren, Gradientenabstiegsalgorithmus % B8% 8B% E6% B3% 95) wird verwendet. Dies ist dem SGD, den wir im Chainer-Tutorial aufgerufen haben, sehr ähnlich, aber es ist eine andere Technik.

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

Initialisieren Sie nun die Variablen und bereiten Sie die Ausführung vor. Die Definition der Variableninitialisierung, jedoch gemäß den Tutorials (https://www.tensorflow.org/tutorials/mnist/beginners/)

init = tf.global_variables_initializer()


 Es scheint, dass es geschrieben werden sollte, aber in Wirklichkeit ist dies ein Fehler.

Traceback (most recent call last): File "./mnist_train_tf.py", line 14, in init = tf.global_variables_initializer() AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'


 Laut https://github.com/tensorflow/tensorflow/issues/5514#issuecomment-260840208 scheint es, dass `` `global_variables_initializer ()` `` aus r0.12 von Tensorflow vor r0.11 definiert wurde. Scheint `` `initialize_all_variables ()` `` verwendet zu haben. Das Tutorial ist r0.12-konform, aber der in der Anaconda-Umgebung installierte Tensorflow ist r0.11, sodass anscheinend ein Fehler aufgetreten ist.

## Versuch zur Optimierung
 Definieren Sie eine Sitzung mit Tensorflow und wählen Sie in dieser Sitzung 100 aus den Testdaten aus und lernen Sie.
 Das wird 1000 mal wiederholt.

```python
sess = tf.Session()
sess.run(init)
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})

Der zuvor definierte train_step dient zur Minimierung von cross_entropy, und die von mnist erhaltenen Daten batch_xs und label batch_ys werden über das Argument feed_dict eingegeben.

Ausführungsergebnis

20170104_004.png

Da es 0,9184 ist, denke ich, dass es als numerischer Wert unerwartet niedrig ist.

Tutorial sagt auch so.

This should be about 92%.

Is that good? Well, not really. In fact, it's pretty bad. This is because we're using a very simple model. With some small changes, we can get to 97%. The best models can get to over 99.7% accuracy!

Nun, es scheint, weil ich ein einfaches Modell für das Tutorial verwendet habe.

Die heutige Zusammenfassung

Selbst mit dem Ansatz des neuronalen Netzes stellte sich heraus, dass jedes Tool seine eigene Implementierungsmethode hat. Ich stellte auch fest, dass ich nicht genug Wissen über neuronale Netze und künstliche Intelligenz hatte, um diesen Code richtig zu verstehen.

Der heutige Code


Nachtrag vom 22.02.2017

Mit der Veröffentlichung von TensorFlow 1.0 hat sich die Installationsmethode geändert. Probieren Sie es auf Ihrem Windows-Computer aus.

Installation unter Windows

Unter https://www.tensorflow.org/install/install_windows heißt es, mit pip anstelle von conda zu installieren.

Das?

Wenn ich den Beispielcode ausführe, um zu überprüfen, ob er installiert wurde, funktioniert er vorerst, aber ich erhalte viele Warnungen.

>>> import tensorflow as tf
>>> hello = tf.constant('Hello, Tensorflow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "BestSplits" device_type: "CPU"') for unknown op: BestSplits
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "CountExtremelyRandomStats" device_type: "CPU"') for unknown op: Cou
ntExtremelyRandomStats
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "FinishedNodes" device_type: "CPU"') for unknown op: FinishedNodes
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "GrowTree" device_type: "CPU"') for unknown op: GrowTree
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "ReinterpretStringToFloat" device_type: "CPU"') for unknown op: Rein
terpretStringToFloat
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "SampleInputs" device_type: "CPU"') for unknown op: SampleInputs
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "ScatterAddNdim" device_type: "CPU"') for unknown op: ScatterAddNdim

E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "TopNInsert" device_type: "CPU"') for unknown op: TopNInsert
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "TopNRemove" device_type: "CPU"') for unknown op: TopNRemove
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "TreePredictions" device_type: "CPU"') for unknown op: TreePredictio
ns
E c:\tf_jenkins\home\workspace\release-win\device\cpu\os\windows\tensorflow\core\framework\op_ke
rnel.cc:943] OpKernel ('op: "UpdateFertileSlots" device_type: "CPU"') for unknown op: UpdateFert
ileSlots
b'Hello, Tensorflow!'

Hallo Tensorflow! Wird am Ende angezeigt, aber was ist das auf dem Weg?

Recommended Posts

Einführung in Private TensorFlow
Einführung in Private Chainer
Eine Einführung in das maschinelle Lernen
Eine Einführung in die Python-Programmierung
Einführung in die Bayes'sche Optimierung
Eine Einführung in Mercurial für Nicht-Ingenieure
Einführung in TensorFlow - Hallo World Edition
Erste Schritte mit Python für Nicht-Ingenieure
[Python Tutorial] Eine einfache Einführung in Python
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung in Tkinter 1: Einführung
Eine Einführung in OpenCV für maschinelles Lernen
Einführung in PyQt
Einführung in Scrapy (2)
Rekursives neuronales Netzwerk: Eine Einführung in RNN
Wahrscheinlich die einfachste Einführung in TensorFlow
[Linux] Einführung in Linux
Einführung in Scrapy (4)
Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
Einführung in discord.py (2)
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in die Objektorientierung - Geben Sie einem Objekt ein Kind.
Eine Einführung in Python für C-Sprachprogrammierer
Was ist ein Algorithmus? Einführung in den Suchalgorithmus] ~ Python ~
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Eine Einführung in Cython, ohne tief zu gehen
Eine Einführung in die statistische Modellierung für die Datenanalyse
[Einführung in TensorBoard] Visualisieren Sie die TensorFlow-Verarbeitung, um das Verständnis zu vertiefen
Einführung in Python "Re" 1 Erstellen einer Ausführungsumgebung
Eine Einführung in die Sprachanalyse für Musik-Apps
Einführung in Cython ohne tief zu gehen -2-
Einführung in Lightning Pytorch
Erste Schritte mit Web Scraping
Einführung in nichtparametrische Felder
Einführung in EV3 / MicroPython
Einführung in die Python-Sprache
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
Einführung in PyQt4 Teil 1
Einführung in die Abhängigkeitsinjektion
Einführung in das maschinelle Lernen
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Lesehinweis: Einführung in die Datenanalyse mit Python
Einführung in Word2Vec, die auch Katzen verstehen können
[Einführung in RasPi4] Umgebungskonstruktion; OpenCV / Tensorflow, japanische Eingabe ♪
Ich habe versucht, die alternative Klasse mit Tensorflow zu finden
[Einführung in TensorBoard: image] TensorFlow Visualisieren Sie die Bildverarbeitung, um das Verständnis zu vertiefen
Einführung in das maschinelle Lernen mit Simple Perceptron
AOJ Einführung in die Programmierung Thema Nr. 1, Thema Nr. 2, Thema Nr. 3, Thema Nr. 4
Einführung in das elektronische Papiermodul
Einführung in den Wörterbuch-Suchalgorithmus
[Lernmemorandum] Einführung in vim
Einführung in PyTorch (1) Automatische Differenzierung
opencv-python Einführung in die Bildverarbeitung
Einführung in Python Django (2) Win