Qu'est-ce que TensorFlow ? Comment ça fonctionne? Introduction & Architecture

Commençons ce tutoriel par l'introduction de TensorFlow :

Qu'est-ce que TensorFlow ?

TensorFlow est une plateforme open source de bout en bout pour créer des applications de Machine Learning. Il s'agit d'une bibliothèque mathématique symbolique qui utilise le flux de données et la programmation différenciable pour effectuer diverses tâches axées sur la formation et l'inférence de réseaux neuronaux profonds. Il permet aux développeurs de créer des applications d'apprentissage automatique à l'aide de divers outils, bibliothèques et ressources communautaires.

Actuellement, la bibliothèque d'apprentissage profond la plus célèbre au monde est TensorFlow de Google. Le produit Google utilise l'apprentissage automatique dans tous ses produits pour améliorer le moteur de recherche, la traduction, le sous-titrage d'images ou les recommandations.

Exemple TensorFlow

Pour donner un exemple concret, les utilisateurs de Google peuvent bénéficier d’une expérience de recherche plus rapide et plus raffinée grâce à l’IA. Si l'utilisateur saisit un mot-clé dans la barre de recherche, Google fournit une recommandation sur ce que pourrait être le mot suivant.

Exemple TensorFlow
Exemple TensorFlow

Google souhaite utiliser l'apprentissage automatique pour tirer parti de ses énormes ensembles de données afin d'offrir aux utilisateurs la meilleure expérience. Trois groupes différents utilisent l'apprentissage automatique :

  • Chercheurs
  • Data Scientists
  • Programmeurs

Ils peuvent tous utiliser le même ensemble d’outils pour collaborer les uns avec les autres et améliorer leur efficacité.

Google ne dispose pas de n’importe quelle donnée ; ils possèdent l'ordinateur le plus massif au monde, Tensor Flow a donc été conçu pour évoluer. TensorFlow est une bibliothèque développée par la Google Brain Team pour accélérer l'apprentissage automatique et la recherche sur les réseaux neuronaux profonds.

Il a été conçu pour fonctionner sur plusieurs processeurs ou GPU et même sur des systèmes d'exploitation mobiles, et il dispose de plusieurs wrappers dans plusieurs langages comme Python, C++ or Java.

Histoire de TensorFlow

Il y a quelques années, l'apprentissage profond a commencé à surpasser tous les autres algorithmes d'apprentissage automatique lorsqu'il s'agissait de fournir une quantité massive de données. Google a vu qu'il pouvait utiliser ces réseaux de neurones profonds pour améliorer ses services :

  • Gmail
  • Photo
  • Moteur de recherche Google

Ils construisent un cadre appelé Tensorflow pour permettre aux chercheurs et aux développeurs de travailler ensemble sur un modèle d'IA. Une fois développé et mis à l’échelle, il permet à un grand nombre de personnes de l’utiliser.

Il a été rendu public pour la première fois fin 2015, tandis que la première version stable est apparue en 2017. Il est open source sous licence Apache Open Source. Vous pouvez l'utiliser, le modifier et redistribuer la version modifiée moyennant des frais sans rien payer à Google.

Ensuite, dans ce didacticiel d'apprentissage TensorFlow Deep, nous découvrirons l'architecture TensorFlow et le fonctionnement de TensorFlow.

Comment fonctionne TensorFlow

TensorFlow vous permet de créer des graphiques et des structures de flux de données pour définir la manière dont les données se déplacent dans un graphique en prenant les entrées sous la forme d'un tableau multidimensionnel appelé Tensor. Il vous permet de construire un organigramme des opérations pouvant être effectuées sur ces entrées, qui va à une extrémité et arrive à l'autre extrémité en sortie.

TensorFlow Architecture

L'architecture Tensorflow fonctionne en trois parties :

  • Prétraitement des données
  • Construisez le modèle
  • Entraîner et estimer le modèle

Il s'appelle Tensorflow car il accepte les entrées sous forme de tableau multidimensionnel, également connu sous le nom de tenseurs. Vous pouvez construire une sorte de Organigramme d'opérations (appelées graphique) que vous souhaitez effectuer sur cette entrée. L’entrée entre par une extrémité, puis traverse ce système d’opérations multiples et ressort par l’autre extrémité en tant que sortie.

C'est pourquoi on l'appelle TensorFlow, car le tenseur entre dans une liste d'opérations, puis ressort de l'autre côté.

Où Tensorflow peut-il s'exécuter ?

Matériel TensorFlow, et Logiciels requis peut être classé en

Phase de développement : c'est à ce moment-là que vous entraînez le mode. La formation se fait généralement sur votre ordinateur de bureau ou portable.

Phase d'exécution ou phase d'inférence : une fois la formation terminée, Tensorflow peut être exécuté sur de nombreuses plates-formes différentes. Vous pouvez l'exécuter sur

  • Bureau en cours d'exécution Windows, macOS ou Linux
  • Le cloud en tant que service Web
  • Appareils mobiles comme iOS et Android

Vous pouvez l'entraîner sur plusieurs machines, puis l'exécuter sur une autre machine, une fois que vous avez le modèle entraîné.

Le modèle peut être entraîné et utilisé sur des GPU ainsi que sur des CPU. Les GPU ont été initialement conçus pour les jeux vidéo. Fin 2010, des chercheurs de Stanford ont découvert que le GPU était également très performant dans les opérations matricielles et l'algèbre, ce qui les rend très rapides pour effectuer ce type de calculs. L'apprentissage profond repose sur une grande partie de la multiplication matricielle. TensorFlow est très rapide pour calculer la multiplication matricielle car il est écrit en C++. Bien qu'il soit mis en œuvre dans C++, TensorFlow est accessible et contrôlé par d'autres langages principalement, Python.

Enfin, une fonctionnalité importante de TensorFlow est le TensorBoard. Le Tableau Tenseur permet de surveiller graphiquement et visuellement ce que fait TensorFlow.

Composants TensorFlow

tenseur

Le nom de Tensorflow est directement dérivé de son framework principal : tenseur. Dans Tensorflow, tous les calculs impliquent des tenseurs. Un tenseur est un vecteur or matrice de n dimensions qui représente tous les types de données. Toutes les valeurs d'un tenseur contiennent un type de données identique avec un type de données connu (ou partiellement connu) forme. La forme des données correspond à la dimensionnalité de la matrice ou du tableau.

Un tenseur peut provenir des données d'entrée ou du résultat d'un calcul. Dans TensorFlow, toutes les opérations sont effectuées au sein d'un graphique. Le graphe est un ensemble de calculs qui s'effectuent successivement. Chaque opération est appelée une nœud opérationnel et sont connectés les uns aux autres.

Le graphique décrit les opérations et les connexions entre les nœuds. Cependant, il n'affiche pas les valeurs. Le bord des nœuds est le tenseur, c'est-à-dire un moyen de remplir l'opération avec des données.

Graphiques

TensorFlow utilise un framework graphique. Le graphique rassemble et décrit tous les calculs de séries effectués lors de la formation. Le graphique présente de nombreux avantages :

  • Il a été conçu pour fonctionner sur plusieurs processeurs ou GPU et même sur un système d'exploitation mobile.
  • La portabilité du graphe permet de conserver les calculs pour une utilisation immédiate ou ultérieure. Le graphique peut être enregistré pour être exécuté ultérieurement.
  • Tous les calculs du graphique sont effectués en connectant des tenseurs entre eux
    • Un tenseur a un nœud et une arête. Le nœud effectue l'opération mathématique et produit des sorties de points finaux. Les arêtes les arêtes expliquent les relations d'entrée/sortie entre les nœuds.

Pourquoi TensorFlow est-il populaire ?

TensorFlow est la meilleure bibliothèque de toutes car elle est conçue pour être accessible à tous. La bibliothèque Tensorflow intègre différentes API pour créer une architecture d'apprentissage en profondeur à grande échelle comme CNN ou RNN. TensorFlow est basé sur le calcul graphique ; il permet au développeur de visualiser la construction du réseau de neurones avec Tensorboad. Cet outil est utile pour déboguer le programme. Enfin, Tensorflow est conçu pour être déployé à grande échelle. Il fonctionne sur CPU et GPU.

Tensorflow attire la plus grande popularité sur GitHub par rapport aux autres frameworks d'apprentissage en profondeur.

TensorFlow Algorithms

Vous trouverez ci-dessous les algorithmes pris en charge par TensorFlow :

Actuellement, TensorFlow 1.10 dispose d'une API intégrée pour :

  • Régression linéaire : tf.estimator.LinearRegressor
  • Classification : tf.estimator.LinearClassifier
  • Classification de l'apprentissage profond : tf.estimator.DNNClassifier
  • Effacement et approfondissement du Deep Learning : tf.estimator.DNNLinearCombinedClassifier
  • Régression de l'arbre Booster : tf.estimator.BoostedTreesRegressor
  • Classification des arbres boostée : tf.estimator.BoostedTreesClassifier

Comment fonctionnent les calculs dans TensorFlow

import numpy as np
import tensorflow as tf

Dans les deux premières lignes de code, nous avons importé Tensorflow au format tf. Avec Python, il est courant d'utiliser un nom court pour une bibliothèque. L'avantage est d'éviter de taper le nom complet de la bibliothèque lorsqu'on a besoin de l'utiliser. Par exemple, nous pouvons importer Tensorflow au format tf et appeler tf lorsque nous voulons utiliser une fonction Tensorflow.

Pratiquons le flux de travail élémentaire de Tensorflow avec des exemples simples de TensorFlow. Créons un graphique informatique qui multiplie deux nombres ensemble.

Dans l'exemple, nous multiplierons X_1 et X_2 ensemble. Tensorflow créera un nœud pour connecter l'opération. Dans notre exemple, cela s’appelle multiplier. Lorsque le graphique est déterminé, les moteurs de calcul Tensorflow multiplieront ensemble X_1 et X_2.

Les calculs fonctionnent dans TensorFlow
Exemple TensorFlow

Enfin, nous exécuterons une session TensorFlow qui exécutera le graphique de calcul avec les valeurs de X_1 et X_2 et imprimera le résultat de la multiplication.

Définissons les nœuds d'entrée X_1 et X_2. Lorsque nous créons un nœud dans Tensorflow, nous devons choisir le type de nœud créer. Les nœuds X1 et X2 seront un nœud réservé. L'espace réservé attribue une nouvelle valeur à chaque fois que nous effectuons un calcul. Nous allons les créer en tant que nœud d'espace réservé TF dot.

Étape 1 : Définir la variable

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

Lorsque nous créons un nœud d'espace réservé, nous devons transmettre le type de données en ajoutant des nombres ici afin que nous puissions utiliser un type de données à virgule flottante, utilisons tf.float32. Nous devons également donner un nom à ce nœud. Ce nom apparaîtra lorsque nous regarderons les visualisations graphiques de notre modèle. Nommons ce nœud X_1 en passant un paramètre appelé name avec une valeur de X_1 et définissons maintenant X_2 de la même manière. X_2.

Étape 2 : Définir le calcul

multiply = tf.multiply(X_1, X_2, name = "multiply")

Nous pouvons maintenant définir le nœud qui effectue l’opération de multiplication. Dans Tensorflow, nous pouvons le faire en créant un nœud tf.multiply.

Nous passerons les nœuds X_1 et X_2 au nœud de multiplication. Il demande à Tensorflow de lier ces nœuds dans le graphe informatique, nous lui demandons donc d'extraire les valeurs de x et y et de multiplier le résultat. Donnons également au nœud de multiplication le nom de multiplication. C'est la définition complète de notre graphe informatique simple.

Étape 3 : Exécuter l'opération

Pour exécuter des opérations dans le graphique, nous devons créer une session. Dans Tensorflow, cela se fait par tf.Session(). Maintenant que nous avons une session, nous pouvons demander à la session d'exécuter des opérations sur notre graphe informatique en appelant session. Pour exécuter le calcul, nous devons utiliser run.

Lorsque l'opération d'addition s'exécutera, elle verra qu'elle doit récupérer les valeurs des nœuds X_1 et X_2, nous devons donc également introduire les valeurs pour X_1 et X_2. Nous pouvons le faire en fournissant un paramètre appelé feed_dict. On passe la valeur 1,2,3 pour X_1 et 4,5,6 pour X_2.

Nous imprimons les résultats avec print(result). On devrait voir 4, 10 et 18 pour 1×4, 2×5 et 3×6

X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")

multiply = tf.multiply(X_1, X_2, name = "multiply")

with tf.Session() as session:
    result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
    print(result)
[ 4. 10. 18.]

Options pour charger des données dans TensorFlow

La première étape avant de former un algorithme d'apprentissage automatique est de charger les données. Il existe deux manières courantes de charger des données :

1. Charger des données en mémoire: C'est la méthode la plus simple. Vous chargez toutes vos données en mémoire sous la forme d'un seul tableau. Vous pouvez écrire un Python code. Ces lignes de code n'ont aucun rapport avec Tensorflow.

2. Pipeline de données Tensorflow: Tensorflow dispose d'une API intégrée qui vous aide à charger les données, à effectuer l'opération et à alimenter facilement l'algorithme d'apprentissage automatique. Cette méthode fonctionne très bien, surtout lorsque vous disposez d’un grand ensemble de données. Par exemple, les enregistrements d’images sont connus pour être énormes et ne rentrent pas dans la mémoire. Le pipeline de données gère lui-même la mémoire

Quelle solution utiliser ?

Charger des données en mémoire

Si votre ensemble de données n'est pas trop volumineux, c'est-à-dire moins de 10 gigaoctets, vous pouvez utiliser la première méthode. Les données peuvent tenir dans la mémoire. Vous pouvez utiliser une célèbre bibliothèque appelée Pandas pour importer des fichiers CSV. Vous en apprendrez plus sur les pandas dans le prochain tutoriel.

Charger des données avec le pipeline Tensorflow

La deuxième méthode fonctionne mieux si vous disposez d’un grand ensemble de données. Par exemple, si vous disposez d’un ensemble de données de 50 Go et que votre ordinateur ne dispose que de 16 Go de mémoire, la machine plantera.

Dans cette situation, vous devez créer un pipeline Tensorflow. Le pipeline chargera les données par lots ou en petits morceaux. Chaque lot sera poussé vers le pipeline et sera prêt pour la formation. Construire un pipeline est une excellente solution car il permet d'utiliser le calcul parallèle. Cela signifie que Tensorflow entraînera le modèle sur plusieurs processeurs. Il favorise le calcul et permet de former un réseau neuronal puissant.

Vous verrez dans les prochains tutoriels comment construire un pipeline important pour alimenter votre réseau de neurones.

En un mot, si vous disposez d'un petit ensemble de données, vous pouvez charger les données en mémoire avec la bibliothèque Pandas.

Si vous disposez d'un grand ensemble de données et que vous souhaitez utiliser plusieurs processeurs, vous serez alors plus à l'aise pour travailler avec le pipeline Tensorflow.

Comment créer un pipeline TensorFlow

Voici les étapes pour créer un pipeline TensorFlow :

Dans l'exemple précédent, nous avons ajouté manuellement trois valeurs pour X_1 et X_2. Maintenant, nous allons voir comment charger des données dans Tensorflow :

Étape 1) Créer les données

Tout d'abord, utilisons la bibliothèque numpy pour générer deux valeurs aléatoires.

import numpy as np
x_input = np.random.sample((1,2))
print(x_input)

[[0.8835775 0.23766977]]

Étape 2) Créez l'espace réservé

Comme dans l'exemple précédent, nous créons un espace réservé avec le nom X. Nous devons spécifier explicitement la forme du tenseur. Dans ce cas, nous chargerons un tableau avec seulement deux valeurs. Nous pouvons écrire la forme sous la forme shape=[1,2]

# using a placeholder
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')

Étape 3) Définir la méthode de jeu de données

Ensuite, nous devons définir l'ensemble de données dans lequel nous pouvons renseigner la valeur de l'espace réservé x. Nous devons utiliser la méthode tf.data.Dataset.from_tensor_slices

dataset = tf.data.Dataset.from_tensor_slices(x)

Étape 4) Créer le pipeline

À la quatrième étape, nous devons initialiser le pipeline dans lequel les données circuleront. Nous devons créer un itérateur avec make_initializing_iterator. Nous l'appelons itérateur. Ensuite, nous devons appeler cet itérateur pour alimenter le prochain lot de données, get_next. Nous nommons cette étape get_next. Notez que dans notre exemple, il n'y a qu'un seul lot de données avec seulement deux valeurs.

iterator = dataset.make_initializable_iterator() 
get_next = iterator.get_next()

Étape 5) Exécuter l'opération

La dernière étape est similaire à l'exemple précédent. Nous lançons une session et exécutons l'itérateur d'opération. Nous alimentons le feed_dict avec la valeur générée par numpy. Ces deux valeurs rempliront l'espace réservé x. Ensuite, nous exécutons get_next pour imprimer le résultat.

with tf.Session() as sess:
    # feed the placeholder with data
    sess.run(iterator.initializer, feed_dict={ x: x_input }) 
    print(sess.run(get_next)) # output [ 0.52374458  0.71968478]
[0.8835775  0.23766978]

Résumé

  • Signification de TensorFlow : TensorFlow est la bibliothèque d'apprentissage profond la plus célèbre de ces dernières années. Un praticien utilisant TensorFlow peut créer n'importe quelle structure d'apprentissage en profondeur, comme CNN, RNN ou un simple réseau de neurones artificiels.
  • TensorFlow est principalement utilisé par les universitaires, les startups et les grandes entreprises. Google utilise TensorFlow dans presque tous les produits Google quotidiens, notamment Gmail, Photo et Google Search Engine.
  • L'équipe Google Brain a développé TensorFlow pour combler le fossé entre les chercheurs et les développeurs de produits. En 2015, ils ont rendu public TensorFlow ; sa popularité augmente rapidement. De nos jours, TensorFlow est la bibliothèque de deep learning avec le plus de référentiels sur GitHub.
  • Les praticiens utilisent Tensorflow car il est facile à déployer à grande échelle. Il est conçu pour fonctionner dans le cloud ou sur des appareils mobiles comme iO et Android.

Tensorflow fonctionne en session. Chaque session est définie par un graphique avec différents calculs. Un exemple simple peut être de multiplier par un nombre. Dans Tensorflow, trois étapes sont requises :

  1. Définir la variable
X_1 = tf.placeholder(tf.float32, name = "X_1")
X_2 = tf.placeholder(tf.float32, name = "X_2")
  1. Définir le calcul
multiply = tf.multiply(X_1, X_2, name = "multiply")
  1. Exécutez l'opération
with tf.Session() as session:
result = session.run(multiply, feed_dict={X_1:[1,2,3], X_2:[4,5,6]})
print(result)

Une pratique courante dans Tensorflow consiste à créer un pipeline pour charger les données. Si vous suivez ces cinq étapes, vous pourrez charger des données dans TensorFLow :

  1. Créer les données
import numpy as np
x_input = np.random.sample((1,2))
print(x_input)
  1. Créer l'espace réservé
x = tf.placeholder(tf.float32, shape=[1,2], name = 'X')
  1. Définir la méthode de jeu de données
dataset = tf.data.Dataset.from_tensor_slices(x)
  1. Créer le pipeline
iterator = dataset.make_initializable_iterator() get_next = iterator.get_next()
  1. Exécuter le programme
with tf.Session() as sess:  
sess.run(iterator.initializer, feed_dict={ x: x_input })  
print(sess.run(get_next))