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.
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.
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
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.
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>
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
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.
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.
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.
Mit der Veröffentlichung von TensorFlow 1.0 hat sich die Installationsmethode geändert. Probieren Sie es auf Ihrem Windows-Computer aus.
Unter https://www.tensorflow.org/install/install_windows heißt es, mit pip anstelle von conda zu installieren.
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