[PYTHON] Introduction à Private TensorFlow

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.

De la préparation de TensorFlow

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.

Revenir à MNIST For ML Beginners

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

Implémentation MNIST dans TensorFlow

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.

Lire des données et définir des expressions

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>

Se préparer à l'optimisation

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 init = tf.global_variables_initializer() AttributeError: module 'tensorflow' has no attribute 'global_variables_initializer'


 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.

Résultat d'exécution

20170104_004.png

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.

Résumé du jour

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.

Code du jour


22/02/2017 postscript

Avec la sortie de TensorFlow 1.0, la méthode d'installation a changé. Essayez-le sur votre machine Windows.

Installation sous Windows

Il dit d'installer avec pip au lieu de conda à https://www.tensorflow.org/install/install_windows.

cette?

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

Introduction à Private TensorFlow
Introduction à Private Chainer
Une introduction à l'apprentissage automatique
Une introduction à la programmation Python
Introduction à l'optimisation bayésienne
Une introduction à Mercurial pour les non-ingénieurs
Introduction à TensorFlow - Hello World Edition
Premiers pas avec Python pour les non-ingénieurs
[Tutoriel Python] Une introduction facile à Python
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
Une introduction à OpenCV pour l'apprentissage automatique
Introduction à PyQt
Introduction à Scrapy (2)
Réseau neuronal récursif: une introduction à RNN
Probablement l'introduction la plus simple à TensorFlow
[Linux] Introduction à Linux
Introduction à Scrapy (4)
Les débutants lisent "Introduction à TensorFlow 2.0 pour les experts"
Introduction à discord.py (2)
Une introduction à Python pour l'apprentissage automatique
Une introduction à l'orientation des objets - Donnez à un objet un enfant.
Une introduction à Python pour les programmeurs en langage C
Qu'est-ce qu'un algorithme? Introduction à l'algorithme de recherche] ~ Python ~
Une introduction à la programmation orientée objet pour les débutants par les débutants
Une introduction à Cython sans aller plus loin
Introduction à la modélisation statistique pour l'analyse des données
[Introduction à TensorBoard] Visualisez le traitement TensorFlow pour approfondir la compréhension
Introduction à Python "Re" 1 Construction d'un environnement d'exécution
Une introduction à l'analyse vocale pour les applications musicales
Introduction à Cython sans approfondir -2-
Introduction à Lightning Pytorch
Premiers pas avec le Web Scraping
Introduction aux baies non paramétriques
Introduction à EV3 / MicroPython
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à l'apprentissage automatique
Introduction au traitement parallèle distribué Python par Ray
Note de lecture: Introduction à l'analyse de données avec Python
Introduction à Word2Vec que même les chats peuvent comprendre
[Introduction à RasPi4] Construction de l'environnement; OpenCV / Tensorflow, entrée japonaise ♪
J'ai essayé de trouver la classe alternative avec tensorflow
[Introduction à TensorBoard: image] TensorFlow Visualisez le traitement d'image pour approfondir la compréhension
Introduction à l'apprentissage automatique à partir de Simple Perceptron
AOJ Introduction à la programmation Sujet 1, Sujet 2, Sujet 3, Sujet 4
Introduction au module de papier électronique
Introduction à l'algorithme de recherche de dictionnaire
[Mémorandum d'apprentissage] Introduction à vim
Introduction à PyTorch (1) Différenciation automatique
opencv-python Introduction au traitement d'image
Introduction à Python Django (2) Win