Introduction à Private Chainer J'ai décidé de continuer avec Ikioi. Cependant, plutôt que d'aller dans le sens de la maîtrise du chainer, je veux gâcher les choses. Eh bien, c'est pourquoi c'est TensorFlow.
Veuillez vous référer à MNIST pour les débutants en ML.
MNIST dans Introduction to Private Chainer et Handwritten character reconnaissance using KNN in Python Cependant, son utilisation pour "créer un discriminateur de nombre" est la base du didacticiel d'apprentissage automatique. En d'autres termes, c'est comme si une personne qui est nouvelle dans la base de données Oracle entre à partir de l'instruction SQL qui sélectionne la base de données scott / tiger emp.
Utilisez TensorFlow de Python. Puisque l'environnement Python est créé avec Anaconda, installez-le comme suit conformément à la Documentation.
% conda install -c conda-forge tensorflow
Ceci termine l'installation.
Exécutez le code suivant sans connaître la raison.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
Pour le moment, quand je l'ai exécuté avec ipython, c'est devenu comme suit.
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
Apparemment, les données ont été téléchargées.
% % 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
Selon MNIST For ML Beginners, l'image du numéro manuscrit de 28x28 pixels est soit 0-9, tout comme le tutoriel de chainer. Y a-t-il? Est évalué par l'équation linéaire de y = Wx + b. La différence est que dans le didacticiel chainer, ce qui était chainer.links.Linear () doit être évalué à l'aide de Softmax Regression. Je ne comprends pas la différence dans ce domaine car je n'ai pas assez étudié.
Selon Tutorial, les données d'image sont de 28x28 pixels par nombre, mais ce sont les données de tableau unidimensionnelles 28x28 = 784. Il semble penser que oui et supposer qu'il y en a 55 000. Autrement dit, on suppose que toutes les données sont une matrice de 784 lignes × 55000 colonnes, et il s'agit de mnist.train.xs. Le libellé de chaque colonne (c'est-à-dire, qui indique quelle colonne va de 0 à 9?) Est tenu sous la forme d'une matrice de 10 lignes × 55000 colonnes, et la seule est mnist.train.ys. Pourquoi 10 lignes? En parlant de cela, 0 est [1,0,0,0,0,0,0,0,0,0] et 3 est [0,0,0,1,0,0,0,0,0,0] Il semble que ce soit parce qu'il est exprimé comme.
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])
Tout d'abord, définissez les données de 784 colonnes comme un espace réservé.
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
Définissez les paramètres à apprendre comme Variable.
Définissez ensuite le modèle.
y = tf.nn.softmax(tf.matmul(x, W) + b)
matmul () est une multiplication matricielle. Ici, y peut être obtenu par régression softmax. Notez que y est une matrice de 10 lignes illustrée ci-dessous.
<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]))
Au fait, je pense que l'optimisation est la méthode des moindres carrés, mais apparemment ce n'est pas le cas, et il semble que la fonction cross_entropy appelée -Σy'log (y) soit utilisée. Ainsi, afin de minimiser cette cross_entropy, [algorithme de descente de gradient](https://ja.wikipedia.org/wiki/%E6%9C%80%E6%80%A5%E9%99%8D%E4 % B8% 8B% E6% B3% 95) est utilisé. Ceci est très similaire au SGD que nous avons appelé dans le tutoriel de chainer, mais c'est une technique différente.
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
Maintenant, initialisez les variables et préparez-vous à l'exécution. La définition de l'initialisation des variables, mais selon les Tutoriels (https://www.tensorflow.org/tutorials/mnist/beginners/)
init = tf.global_variables_initializer()
Il semble qu'il devrait être écrit, mais en réalité c'est une erreur.
Traceback (most recent call last):
File "./mnist_train_tf.py", line 14, in
Apparemment, selon https://github.com/tensorflow/tensorflow/issues/5514#issuecomment-260840208, il semble que `` global_variables_initializer () '' a été défini à partir de r0.12 de tensorflow, avant r0.11. Semble avoir utilisé ```initialize_all_variables () `` `. Le tutoriel est compatible r0.12, mais le tensorflow installé dans l'environnement anaconda est r0.11, il semble donc qu'une erreur s'est produite.
## Essai d'optimisation
Définissez une session avec tensorflow, et dans cette session, sélectionnez 100 dans les données de test et apprenez.
Cela est répété 1000 fois.
```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})
Le train_step défini précédemment sert à minimiser cross_entropy, et les données batch_xs et l'étiquette batch_ys obtenues à partir de mnist y sont entrées via l'argument feed_dict.
Comme il est de 0,9184, je pense qu'il est étonnamment bas en tant que valeur numérique.
Tutoriel dit aussi comme ça.
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!
Eh bien, il semble que c'est parce que j'ai utilisé un modèle simple pour le tutoriel.
Même avec l'approche du réseau neuronal, il s'est avéré que chaque outil a sa propre méthode de mise en œuvre. J'ai également constaté que je n'avais pas suffisamment de connaissances sur les réseaux neuronaux et l'intelligence artificielle pour comprendre correctement ce code.
Avec la sortie de TensorFlow 1.0, la méthode d'installation a changé. Essayez-le sur votre machine Windows.
Il dit d'installer avec pip au lieu de conda à https://www.tensorflow.org/install/install_windows.
Pour le moment, lorsque j'exécute l'exemple de code pour vérifier s'il a été installé, cela fonctionne, mais je reçois beaucoup d'avertissements.
>>> 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!'
Bonjour Tensorflow, est affiché à la fin, mais qu'est-ce que c'est en cours?
Recommended Posts