Bonjour, Habr! Je vous présente la traduction de l'article "Tutoriel TensorFlow: 10 minutes de cours TensorFlow pratique pour les apprenants rapides" par Ankit Sachan.
Ce didacticiel TensorFlow s'adresse à toute personne ayant une compréhension de base de l'apprentissage automatique et essayant de démarrer avec TensorFlow.
Tout d'abord, vous devez avoir installé TensorFlow. Vous pouvez l'installer dans ce guide. Cette leçon est divisée en deux parties: dans la première partie, nous expliquons les bases avec un exemple de travail, dans la deuxième partie, nous construisons un modèle de régression linéaire.
Partie 1. Bases de TensorFlow
TensorFlow est une bibliothèque numérique dans laquelle les données passent par un graphique. Les données dans TensorFlow sont représentées par des tableaux à n dimensions - tenseurs. Le graphique est composé de données (tenseurs) et d'opérations mathématiques.
Dans les nœuds du graphique se trouvent des opérations mathématiques.
Les bords du graphique représentent des tenseurs qui "circulent" entre les opérations.
Il existe un autre aspect dans lequel TensorFlow est très différent de tout autre langage de programmation. Dans TensorFlow, vous devez d'abord créer un projet de ce que vous voulez créer. Initialement, lors de la création d'un graphique, les variables n'ont aucune signification. Plus tard, lorsque vous avez créé un graphique complet, vous l'exécutez dans une session et ce n'est qu'alors que les variables prendront toutes les valeurs.
Commençons à apprendre en faisant. Exécutez python et importez TensorFlow:
~$ python Python 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>>import tensorflow as tf
Un graphique est utilisé pour définir les opérations et toutes les opérations sont effectuées dans une session. Les graphiques et les sessions sont créés indépendamment les uns des autres. Traitez le graphique comme un projet de construction et la session comme un chantier de construction.
1.1. Graphes dans TensorFlow
Un graphique est la base de TensorFlow, tous les calculs (opérations), les variables sont sur le graphique. Tout ce qui se passe dans le code se trouve sur le graphique par défaut fourni par TensorFlow. Vous pouvez accéder à ce graphique comme suit:
graph = tf.get_default_graph()
Et donc vous pouvez obtenir une liste de toutes les opérations dans cette colonne:
graph.get_operations()
Votre graphique est maintenant vide. Si vous devez imprimer le nom de chaque opération, exécutez le code suivant:
for op in graph.get_operations(): print(op.name)
La sortie sera à nouveau vide. À l'avenir, après avoir ajouté des opérations au graphique, nous utiliserons ce code pour afficher leurs noms.
1.2. Sessions chez TensorFlow
Le graphique définit uniquement les calculs (crée le projet), mais n'a pas de variables, pas de valeurs, sauf si nous exécutons le graphique ou une partie du graphique dans la session.
Vous pouvez créer une session comme celle-ci:
sess=tf.Session() ... your code ... ... your code ... sess.close()
N'oubliez pas que pour démarrer une session, vous devez la terminer ou utiliser le bloc with ... as , par exemple comme ceci:
with tf.Session() as sess: sess.run(f)
L'avantage de cette approche est que la session sera fermée automatiquement à la fin du bloc with
1.3. Tenseurs dans TensorFlow
TensorFlow stocke les données dans des tenseurs - tableaux multidimensionnels très similaires aux tableaux numPy.
a) Les constantes sont des valeurs qui ne peuvent pas être modifiées. Ils sont définis comme suit:
a=tf.constant(1.0)
cependant, lorsque vous essayez de sortir, vous obtenez les éléments suivants:
print(a) <tf.Tensor'Const:0' shape=() dtype=float32> print(a) Tensor("Const:0", shape=(), dtype=float32)
Comme vous pouvez le voir, ceci est différent des autres langages de programmation, tels que python. Vous ne pouvez pas imprimer ou accéder à la constante tant que vous n'avez pas démarré la session. Faisons ça:
with tf.Session() as sess: print(sess.run(a))
Ce code affichera 1.0
b) Les variables sont également des tenseurs qui sont comme des variables dans d'autres langages de programmation:
>>>b = tf.Variable(2.0,name="test_var") >>>b <tensorflow.python.ops.variables.Variable object at 0x7f37ebda1990>
Contrairement aux constantes, les variables peuvent changer leur contenu. Cependant, les variables de TensorFlow doivent être initialisées dans une opération d'initialisation distincte. L'initialisation de toutes les variables peut prendre beaucoup de temps, mais TensorFlow fournit un mécanisme pour initialiser toutes les variables à la fois:
init_op = tf.global_variables_initializer()
Vous devez maintenant démarrer l'opération d'initialisation avant d'essayer d'accéder à la variable:
with tf.Session() as sess: sess.run(init_op) print(sess.run(b))
Ce code affichera 2.0
Si vous essayez maintenant d'imprimer des opérations dans le graphique
graph = tf.get_default_graph() for op in graph.get_operations(): print(op.name)
vous obtiendrez la sortie suivante:
Const test_var/initial_value test_var test_var/Assign test_var/read init
Comme vous pouvez le voir, nous avons déclaré «a» comme Const et il a été ajouté au graphique. De même, pour la variable b, de nombreux états test_var ont été ajoutés au graphique TensorFlow, tels que test_var / initial_value, test_var / read, etc. Vous pouvez visualiser l'ensemble du réseau à l'aide de TensorBoard, qui est un outil pour visualiser le graphique TensorFlow et le processus d'apprentissage. .
c) Les espaces réservés sont des tenseurs qui attendent d'être initialisés avec des données. Ils sont utilisés pour les données qui seront fournies uniquement lorsque le code est réellement exécuté dans la session. Ce qui est transféré à l'espace réservé est un dictionnaire qui contient les noms des espaces réservés et leur signification:
a = tf.placeholder("float") b = tf.placeholder("float") y = tf.multiply(a, b) fd = {a: 2, b: 3} with tf.Session() as sess: print(sess.run(y, fd))
Ce code affichera 6.0
1.4. Appareils dans TensorFlow
TensorFlow a des fonctionnalités intégrées très puissantes pour exécuter votre code sur GPU, CPU ou clusters. Il vous donne la possibilité de choisir l'appareil sur lequel vous souhaitez exécuter votre code. Cependant, ce n'est pas quelque chose à penser lorsque vous débutez avec TF.
Voici donc une image complète du fonctionnement des calculs dans TensorFlow:

Partie 2. Tutoriel TensorFlow avec un exemple simple
Dans cette partie, nous allons examiner le code pour exécuter une régression linéaire. Avant cela, regardons certaines des fonctions de base de TensorFlow que nous utiliserons dans le code.
Création d'une distribution normale aléatoire:
Utilisez random_normal pour créer des valeurs aléatoires à partir de la distribution normale. Dans cet exemple, w est une variable de dimension 784 * 10 avec des valeurs aléatoires avec un écart type de 0,01.
w=tf.Variable(tf.random_normal([784, 10], stddev=0.01))
Reduce_mean - Calcule la valeur moyenne d'un tableau
b = tf.Variable([10,20,30,40,50,60],name='t') with tf.Session() as sess: sess.run(tf.initialize_all_variables()) sess.run(tf.reduce_mean(b))
Ce code affichera 35
argmax - très similaire à argmax en Python. Obtient la valeur maximale du tenseur le long de l'axe spécifié.
a=[ [0.1, 0.2, 0.3 ], [20, 2, 3 ] ] b = tf.Variable(a,name='b') with tf.Session() as sess: sess.run(tf.initialize_all_variables()) sess.run(tf.argmax(b,1))
Imprimez un tableau ([2, 0]) qui montre l'index de la valeur maximale dans chacune des lignes a.
Problème de régression linéaire
Énoncé du problème: il existe un grand nombre de points de données, essayant de faire correspondre une ligne droite avec eux. Pour cet exemple, nous allons créer 100 points de données et essayer de faire correspondre la ligne avec eux.
2.1. Créer un jeu de données de formation
trainX contient des valeurs comprises entre -1 et 1, et trainY contient 3 fois la valeur de trainX plus une variable aléatoire:
import tensorflow as tf import numpy as np trainX = np.linspace(-1, 1, 101) trainY = 3 * trainX + np.random.randn(*trainX.shape) * 0.33
2.2. Espaces réservés
X = tf.placeholder("float") Y = tf.placeholder("float")
2.3. Modélisation
Le modèle de régression linéaire a la forme
- nous devons calculer la valeur de w. Initialisons w à zéro et créons un modèle pour résoudre ce problème. Nous définissons la fonction de coût comme
(Y-y__model) ^ 2
TensorFlow est livré avec de nombreux optimiseurs qui calculent et mettent à jour les gradients après chaque itération, essayant de minimiser la fonction de coût spécifiée. Nous allons définir une opération d'apprentissage à l'aide de GradientDescentOptimizer afin de minimiser notre fonction de coût à une vitesse d'apprentissage de 0,01. Ensuite, nous exécutons cette opération d'apprentissage en boucle.
w = tf.Variable(0.0, name="weights") y_model = tf.multiply(X, w) cost = (tf.pow(Y-y_model, 2)) train_op = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
2.4. La formation
Jusqu'à présent, nous n'avons défini qu'un graphique. Aucun calcul n'a été effectué, aucune des variables TensorFlow n'a d'importance. Pour exécuter ce graphique, nous devons créer une session et l'exécuter. Avant cela, nous devons créer une opération d'initialisation pour toutes les variables:
init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for i in range(100): for (x, y) in zip(trainX, trainY): sess.run(train_op, feed_dict={X: x, Y: y}) print(sess.run(w))
Notez que la première chose qui a été faite a été d'initialiser les variables en appelant init dans session.run () . Plus tard, nous exécutons train_op , nourrissant son feed_dict . Enfin, nous affichons la valeur de w (à nouveau dans sess.run ()), qui devrait être d'environ 3.
Exercice:
Si vous créez une nouvelle session après ce code et essayez d'imprimer w, quelle sera la sortie?
with tf.Session() as sess: sess.run(init) print(sess.run(w))
Oui, vous avez bien compris, 0.0 sera affiché. Dès que nous avons quitté la session créée précédemment, toutes les opérations cessent d'exister.
J'espère que ce tutoriel vous donnera un démarrage rapide avec TensorFlow. N'hésitez pas à poser vos questions dans les commentaires. Le code complet peut être téléchargé ici .