Revenir au contenu principal

TensorFlow™ sur Databricks

Illustration

Variables

TensorFlow offre un moyen de représenter des calculs sans les effectuer tant qu'on ne le demande pas explicitement. C'est une forme de calcul « lazy » qui permet d'améliorer considérablement l'exécution du code :
  • Calcul plus rapide des variables complexes
  • Distribution du calcul sur plusieurs systèmes, GPU inclus
  • Réduction des redondances dans certains calculs

Voyons cela en action. Pour commencer, un script python très simple :

 

x = 35
y = x + 5
print(y)

 

Ce script dit essentiellement « crée une variable x ayant la valeur 35, définis la valeur d'une nouvelle variable y comme la somme de la première plus 5, soit 40 actuellement, et affiche-la ». La valeur 40 s'affiche quand vous exécutez ce programme. Si vous n'avez pas l'habitude d'utiliser Python, créez un nouveau fichier texte appelé basic_script.py, et copiez-y le code. Enregistrez-le sur votre ordinateur et exécutez-le avec :

python basic_script.py

Notez que le chemin (par exemple basic_script.py) doit désigner le fichier, donc s'il se trouve dans le dossier Code, vous utiliserez :

python Code/basic_script.py

Vérifiez que vous avez bien activé l'environnement virtuel Anaconda. Sous Linux, votre terminal ressemblera à ceci :

(tensorenv)username@computername:~$

Si tout fonctionne, convertissons-le en équivalent TensorFlow.

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

print(y)

 

Après exécution, vous obtiendrez un résultat un peu étrange, comme <tensorflow.python.ops.variables.Variable object at 0x7f074bfd9ef0>. Clairement, rien à voir avec la valeur 40.

Et pour cause : notre programme fait en réalité tout autre chose que le précédent. Cette fois, le code réalise les étapes suivantes :

  1. Il importe le module tensorflow et l'appelle tf
  2. Il crée une valeur constante appelée x et lui donne la valeur numérique 35
  3. Il crée une variable appelée y et la définit comme l'équation x + 5
  4. Il affiche l'objet d'équation de y

La différence est subtile : y ne reçoit pas « la valeur actuelle de x + 5 » comme dans notre programme précédent. Cette fois, c'est simplement une équation qui signifie « quand cette variable sera calculée, prends la valeur de x (telle qu'elle sera à ce moment-là) et ajoutes-y 5 ». Le calcul de la valeur y n'est jamais effectué dans le programme ci-dessus.

Corrigeons cela :

 

import tensorflow as tf

x = tf.constant(35, name='x')
y = tf.Variable(x + 5, name='y')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

Nous avons supprimé la déclaration print(y) et ajouté à la place du code qui crée une session et calcule réellement la valeur de y. C'est un peu rudimentaire, mais il fonctionne comme suit :

  1. Il importe le module tensorflow et l'appelle tf
  2. Il crée une valeur constante appelée x et lui donne la valeur numérique 35
  3. Il crée une variable appelée y et la définit comme l'équation x + 5
  4. Il initialise la variable avec tf.global_variables_initializer() (nous approfondirons cela un peu plus loin)
  5. Il crée une session pour calculer les valeurs
  6. Il exécute le modèle créé à l'étape 4
  7. Il exécute simplement la variable y et affiche sa valeur actuelle

C'est à l'étape 4 que la magie se produit. Cette étape crée un graphe des dépendances entre les variables. Dans ce cas, la variable y dépend de la variable x, et cette valeur est transformée par l'ajout de 5. N'oubliez pas que cette valeur n'est pas calculée avant l'étape 7, car jusque-là, seules les équations et les relations sont calculées.

1) Les constantes peuvent également être des tableaux. Prédisez ce que va faire ce code, puis exécutez-le pour confirmer :

 

import tensorflow as tf


x = tf.constant([35, 40, 45], name='x')
y = tf.Variable(x + 5, name='y')


model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    print(session.run(y))

 

2) Générez un tableau NumPy de 10 000 nombres aléatoires (appelé x) et créez une variable pour stocker l'équation

y = 5x2 − 3x+15

Vous pouvez générer le tableau NumPy à l'aide du code suivant :

 

import numpy as np
data = np.random.randint(1000, size=10000)

 

Cette variable data peut ensuite être utilisée à la place de la liste de la question 1 ci-dessus. En règle générale, on utilise NumPy pour les grandes listes ou les grands tableaux de nombres, car il est beaucoup plus efficace et rapide à calculer que les listes. Il fournit également plusieurs fonctions (comme le calcul de la moyenne) qui ne sont pas disponibles avec les listes habituellement.

3) Vous pouvez également mettre des variables à jour dans des boucles, ce que nous utiliserons plus tard à des fins de machine learning. Examinez ce code, prédisez ce qu'il va faire, puis exécutez-le pour vérifier :

 

import tensorflow as tf


x = tf.Variable(0, name='x')

model = tf.global_variables_initializer()

with tf.Session() as session:
    session.run(model)
    for i in range(5):
        x = x + 1
        print(session.run(x))
        

 

4) En reprenant le code des étapes (2) et (3) ci-dessus, créez un programme qui calcule la moyenne « roulante » de la ligne de code suivante : np.random.randint(1000). Autrement dit, faites tourner la boucle et, à chaque boucle, appelez np.random.randint(1000) une fois dans la boucle, et stockez la moyenne actuelle dans une variable qui se met à jour à chaque fois.

5) Utilisez TensorBoard pour visualiser le graphe de certains de ces exemples. Pour exécuter TensorBoard, utilisez la commande : tensorboard --logdir=path/to/log-directory

 

import tensorflow as tf

x = tf.constant(35, name='x')
print(x)
y = tf.Variable(x + 5, name='y')

with tf.Session() as session:
    merged = tf.summary.merge_all()
    writer = tf.summary.FileWriter("/tmp/basic", session.graph)
    model =  tf.global_variables_initializer()
    session.run(model)
    print(session.run(y))

 

Pour en savoir plus sur Tensorboard, suivez notre leçon visualisation.