🧠 TensorFlow – La Plateforme de Machine Learning
Guide complet IDEO-Lab : Tensors, Keras, @tf.function, GradientTape & TFX.
Vue d'ensemble
Plateforme ML/DL (Google). API Python (tf.keras).
Pourquoi TensorFlow ?
Scalabilité (GPU/TPU), Écosystème (TFX, JS, Lite), Production.
Scalabilité ProductionInstallation (Python)
pip install tensorflow. Configuration GPU (CUDA, cuDNN).
Concept N°1 : Les Tensors
Tableaux N-D (Scalaire, Vecteur, Matrice...). tf.Tensor.
Constants vs Variables
tf.constant (immuable) vs tf.Variable (muable, ex: Poids).
Opérations (Ops)
tf.add, tf.matmul, tf.linalg. Broadcasting.
Eager vs Graph (@tf.function)
Eager (Défaut, Python) vs Graph (Compilé, Opto) via @tf.function.
AutoDiff & GradientTape
tf.GradientTape pour calculer le gradient (Backpropagation).
🧩 API Haut Niveau : Keras
tf.keras. L'API simple pour construire des réseaux.
🧩 Keras : Layers (Couches)
Dense, Conv2D (CNN), Embedding, LSTM (RNN).
🧩 Keras : Modèle Sequential
Modèle simple : une pile linéaire de couches.
Sequential Modèle🧩 Keras : Modèle Fonctionnel
Modèles complexes (multi-input, multi-output, "ResNet").
Functional API Modèle🧩 Keras : compile & fit
optimizer, loss, metrics. model.fit(X, y).
Pipelines (tf.data)
API Dataset pour charger et pré-traiter les données (perf).
Sauvegarde & Chargement
model.save(). Formats SavedModel (défaut) et .h5 (Keras).
Outils (IDE & TensorBoard)
Jupyter/Colab. TensorBoard (visualisation).
Écosystème (Déploiement)
TFX (Prod), TF Serving, TF Lite (Mobile), TF.js (Web).
TFX TF Lite TF.jsVitrine (Qui l'utilise ?)
Google, Airbnb, Twitter/X, PayPal, DeepMind.
Google AirbnbLiens Utiles & Formation
tensorflow.org, keras.io, Google Colab (gratuit).
Documentation TutorielsCheat-sheet
Syntaxe Tensors, Keras Sequential, compile/fit.
Qu'est-ce que TensorFlow ?
TensorFlow (TF) est une **plateforme open-source end-to-end** pour le Machine Learning (ML) et le Deep Learning (DL), développée par Google Brain.
Ce n'est pas "juste" une bibliothèque, mais un **écosystème complet** pour :
- Construire des modèles (via l'API Python
tf.keras). - Entraîner des modèles (sur CPU, GPU, ou TPU).
- Déployer des modèles (serveur, mobile/IoT, navigateur).
Flux de travail (Conceptuel)
TensorFlow transforme les opérations (ex: a + b) en un **graphe de calcul (Graph)**, qui peut ensuite être optimisé et exécuté efficacement sur n'importe quel hardware (CPU, GPU...).
+----------------------+
| main.py (Votre code) |
| (API Keras, Python) |
+----------------------+
|
| (1. TF 2.x)
▼
+-----------------------+
| Eager Execution (Défaut)|
| (Python-like) |
+-----------------------+
|
| (2. Si @tf.function)
▼
+--------------------------+
| Graph "Compilé" (Opto) |
| (Indépendant du langage) |
+--------------------------+
|
| (3. Exécuté par)
▼
[Runtime (CPU / GPU / TPU)]
TensorFlow (TF) et PyTorch sont les deux leaders du Deep Learning. Le point fort historique de TF est son orientation **Production**.
| Point Fort | Description |
|---|---|
| Scalabilité | Conçu pour le calcul distribué (Multi-GPU) et le hardware spécialisé (Google TPU - Tensor Processing Units). |
| Robustesse (Production) | L'écosystème TFX (TensorFlow Extended) et TF Serving fournit une solution complète pour déployer, servir et monitorer des modèles en production à grande échelle. |
| Portabilité (Écosystème) | Peut exporter des modèles pour tourner sur mobile (TF Lite), dans le navigateur (TF.js), ou sur microcontrôleurs. |
| Keras (Simplicité) | Depuis TF 2.0, l'API tf.keras est l'implémentation par défaut, la rendant aussi simple à utiliser que PyTorch pour la R&D. |
L'installation se fait via pip (un environnement virtuel Python venv est fortement recommandé).
Version CPU (Pour les tests)
Cette version est simple à installer mais très lente pour l'entraînement de modèles (Deep Learning).
# 1. (Optionnel) Créer un environnement virtuel python -m venv tf_env source tf_env/bin/activate # 2. Installer TensorFlow pip install tensorflow # 3. Vérifier python -c "import tensorflow as tf; print(tf.__version__)"
Version GPU (Pour l'entraînement)
Nécessite une carte NVIDIA. C'est la partie la plus complexe de l'installation.
Depuis TF 2.11+, l'installation (sous Linux/WSL2) est plus simple, mais nécessite toujours les drivers NVIDIA et le toolkit CUDA.
- Installer les **Drivers NVIDIA** (via le site NVIDIA).
- Installer le **NVIDIA CUDA Toolkit** (version spécifique, voir la doc TF).
- Installer **cuDNN** (librairie NVIDIA pour le Deep Learning).
pip install tensorflow(TF détecte CUDA/cuDNN automatiquement).
# (Après installation CUDA/cuDNN)
pip install tensorflow
# Vérifier si le GPU est détecté
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
# (Doit lister votre carte GPU)
Le **Tensor** est l'unité de donnée centrale de TensorFlow (comme un ndarray en NumPy). C'est un tableau multi-dimensionnel.
Un tensor est défini par son **rang** (nombre de dimensions) et sa **forme** (shape).
import tensorflow as tf # Rang 0 (Scalaire) # Shape: [] tensor_0d = tf.constant(4) print(tensor_0d) # Rang 1 (Vecteur) # Shape: [3] tensor_1d = tf.constant([1, 2, 3]) print(tensor_1d) # Rang 2 (Matrice) # Shape: [2, 3] tensor_2d = tf.constant([[1, 2, 3], [4, 5, 6]]) print(tensor_2d) # Rang 3 (Ex: Image RGB) # Shape: [Hauteur, Largeur, Canaux] tensor_3d = tf.constant([ [[1],[2]], [[3],[4]] ]) # Shape [2, 2, 1] # Rang 4 (Ex: Batch d'images) # Shape: [Batch, Hauteur, Largeur, Canaux] tensor_4d = tf.zeros([32, 28, 28, 3]) # (Batch de 32 images 28x28 RGB)
TensorFlow distingue deux types de tensors :
tf.constant (Immuable)
La valeur d'une constante ne peut **jamais** changer. C'est le type par défaut.
c = tf.constant([1.0, 2.0]) # c[0] = 5.0 # Erreur ! (Tensor non-assignable) # c.assign(5.0) # Erreur !
tf.Variable (Mutable)
Les variables maintiennent un état (muable). Elles sont utilisées pour stocker les **poids (weights)** d'un modèle (les paramètres qui seront mis à jour durant l'entraînement).
v = tf.Variable([1.0, 2.0]) # Modifier la valeur v.assign([5.0, 6.0]) v[0].assign(10.0) # OK print(v) #
Vous pouvez utiliser les opérateurs Python (+, *, @) ou les fonctions tf.* (ex: tf.add) pour manipuler les tensors.
a = tf.constant([[1, 2], [3, 4]]) b = tf.constant([[5, 6], [7, 8]]) # 1. Addition (Element-wise) c1 = a + b c2 = tf.add(a, b) # 2. Multiplication (Element-wise) d = a * b # 3. Multiplication de Matrices (Dot product) e1 = a @ b e2 = tf.matmul(a, b) # 4. Broadcasting # (Similaire à NumPy. Le scalaire '2' est # "étiré" pour s'adapter à la matrice 'a') f = a * 2 # [[2, 4], [6, 8]]
@tf.function)Eager Execution (Défaut)
Depuis TF 2.0, l'exécution "Eager" (avide) est activée par défaut. Les opérations s'exécutent **immédiatement**, comme en Python ou NumPy. C'est simple et facile à débugger.
a = tf.constant(2) b = tf.constant(3) c = a + b # (Exécuté immédiatement) print(c) # tf.Tensor(5, ...)
Graph Mode (@tf.function)
Eager est lent. Pour la performance, on utilise le décorateur @tf.function. TensorFlow va "tracer" (compiler) la fonction Python en un **Graphe de calcul** statique.
Ce graphe est optimisé (ex: fusion d'opérations), portable (peut être sauvé) et rapide. (C'est ainsi que model.fit() fonctionne en interne).
# Décorateur
@tf.function
def ma_fonction_rapide(a, b):
c = a + b
d = c * 2
return d
# (Au 1er appel, TF "trace" la fonction en Graphe)
resultat = ma_fonction_rapide(tf.constant(2), tf.constant(3))
# (Les appels suivants utilisent le Graphe optimisé)
resultat_2 = ma_fonction_rapide(tf.constant(10), tf.constant(5))
print(resultat) # tf.Tensor(10, ...)
tf.GradientTapeL'entraînement d'un réseau de neurones repose sur le calcul des **gradients** (la "pente" de la fonction de coût) pour mettre à jour les poids (via la "backpropagation").
TensorFlow utilise tf.GradientTape (Différenciation Automatique - AutoDiff) pour "enregistrer" les opérations et calculer les gradients.
Exemple (Calculer $d(x^2)/dx$ à $x=3$)
x = tf.Variable(3.0)
# 1. Ouvrir une "bande d'enregistrement"
with tf.GradientTape() as tape:
# 2. Définir la fonction (y = x^2)
y = x * x
# 3. Calculer le gradient de 'y' par rapport à 'x'
# (dy/dx = 2*x = 2*3 = 6)
dy_dx = tape.gradient(y, x)
print(dy_dx) # tf.Tensor(6.0, ...)
C'est le mécanisme utilisé par model.fit() pour calculer le gradient de la loss par rapport aux model.trainable_variables.
tf.kerasKeras était une bibliothèque indépendante, appréciée pour sa simplicité. Google l'a adoptée comme l'API haut niveau **officielle** de TensorFlow 2.x.
tf.keras masque la complexité (Tensors, GradientTape, Graphes) et permet de construire des modèles en assemblant des "briques" (Layers).
La structure Keras
- Définir un Modèle : Une collection de Couches (
Layers). - Compiler le Modèle : Définir la fonction de Perte (
loss), l'Optimiseur (optimizer) et les Métriques (metrics). - Entraîner le Modèle : Appeler
.fit()sur les données. - Évaluer / Prédire : Appeler
.evaluate()ou.predict().
Les Layers sont les briques de Keras. Chaque couche contient des poids (tf.Variable) et une logique de calcul (ex: tf.matmul).
Couches Courantes (dans tf.keras.layers)
| Couche | Usage |
|---|---|
Dense (Fully-Connected) | Couche standard (y = activation(W*x + b)). |
Conv2D (Convolution) | Pour les **Images** (CNN). Détecte les "patterns" (contours, textures). |
MaxPooling2D | Pour les **Images** (CNN). Réduit la taille (Downsampling). |
Embedding | Pour le **Texte** (NLP). Transforme les mots (ID) en vecteurs denses. |
LSTM / GRU (Récurrent) | Pour les **Séquences** (Texte, Séries Temporelles). Gère la mémoire. |
Flatten | Aplatit un tensor (ex: sortie de Conv2D vers Dense). |
Dropout | Régularisation (prévient l'overfitting en "éteignant" des neurones). |
SequentialC'est le type de modèle le plus simple : une pile linéaire de couches. Parfait pour la plupart des CNN ou RNN simples.
Exemple (Classification d'images MNIST)
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Flatten, Dense, Conv2D, MaxPooling2D
# 1. Définir le Modèle
model = Sequential([
# (Input shape: 28x28 pixels, 1 canal (gris))
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(64, activation='relu'),
# (Couche de sortie: 10 classes, softmax pour probas)
Dense(10, activation='softmax')
])
# 2. Visualiser
model.summary()
Pour les modèles complexes (ex: connexions résiduelles "ResNet", multi-input, multi-output), l'API Fonctionnelle est nécessaire. On définit les flux de tensors (Input -> Layer -> Output).
Exemple (Modèle simple, 2 inputs)
from tensorflow.keras.layers import Input, Dense, concatenate from tensorflow.keras.models import Model # 1. Définir les Entrées input_A = Input(shape=(32,), name="Input_A") input_B = Input(shape=(64,), name="Input_B") # 2. "Appeler" les couches sur les tensors x = Dense(16, activation='relu')(input_A) y = Dense(32, activation='relu')(input_B) # 3. Concaténer les branches combined = concatenate([x, y]) # 4. Sortie output = Dense(1, activation='sigmoid', name="Output")(combined) # 5. Créer le Modèle model = Model(inputs=[input_A, input_B], outputs=output) model.summary()
.compile() & .fit() (Entraînement)Une fois le modèle défini, il faut le "compiler" (configurer l'entraînement) puis l'"entraîner" (fit).
1. model.compile()
Configure l'apprentissage :
optimizer: L'algorithme de descente de gradient (ex:'adam','sgd').loss: La fonction de coût (erreur) à minimiser (ex:'binary_crossentropy','mse').metrics: Les métriques à surveiller (ex:['accuracy']).
2. model.fit()
Lance la boucle d'entraînement (backpropagation).
# (x_train, y_train sont des Tensors/Numpy arrays)
# 1. Compilation
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy', # (Pour classes entières 0-9)
metrics=['accuracy']
)
# 2. Entraînement
# (5 "epochs" = 5 passages sur tout le dataset)
# (Batch size = 32 échantillons par mise à jour)
history = model.fit(
x_train,
y_train,
epochs=5,
batch_size=32,
validation_split=0.2 # (Garde 20% pour la validation)
)
# 3. Évaluation
model.evaluate(x_test, y_test)
# 4. Prédiction
predictions = model.predict(x_new)
tf.data)Pour les datasets volumineux, charger tout en mémoire (ex: x_train) n'est pas possible. tf.data est l'API (ETL) pour créer des pipelines de données performants (streaming depuis le disque, pré-traitement...).
model.fit() accepte directement un objet tf.data.Dataset.
Exemple (Pipeline simple)
# (Supposons que 'fichiers_images' est une liste de chemins)
# 1. Créer le Dataset (ex: à partir des noms de fichiers)
dataset = tf.data.Dataset.from_tensor_slices(fichiers_images)
# 2. Fonction de chargement et pré-traitement
def load_and_preprocess(path):
image = tf.io.read_file(path)
image = tf.image.decode_jpeg(image)
image = tf.image.resize(image, [128, 128])
image = image / 255.0 # Normaliser
return image
# 3. Appliquer les transformations
# (map: applique la fonction, num_parallel_calls: parallélise)
dataset = dataset.map(load_and_preprocess, num_parallel_calls=tf.data.AUTOTUNE)
# 4. Configurer le pipeline (Performance)
dataset = dataset.shuffle(buffer_size=1000) # Mélanger
dataset = dataset.batch(32) # Créer des lots
dataset = dataset.prefetch(buffer_size=tf.data.AUTOTUNE) # Pré-charger
# 5. Entraîner (TF gère le streaming depuis le disque)
model.fit(dataset, epochs=10)
Il est crucial de sauvegarder l'architecture ET les poids (weights) du modèle après l'entraînement.
Format SavedModel (Dossier)
C'est le format par défaut de TF 2.x. Il sauvegarde tout (architecture, poids, traces @tf.function) dans un dossier. C'est le format requis pour TF Serving ou TFX.
# 1. Sauvegarder
model.save("mon_modele_dossier")
# (Crée un dossier 'mon_modele_dossier'
# contenant 'saved_model.pb', 'assets', 'variables')
# 2. Charger
from tensorflow.keras.models import load_model
new_model = load_model("mon_modele_dossier")
Format .h5 (Fichier unique HDF5)
L'ancien format Keras. Pratique (fichier unique) mais moins complet que SavedModel.
# 1. Sauvegarder (en spécifiant .h5)
model.save("mon_modele.h5")
# 2. Charger
from tensorflow.keras.models import load_model
new_model = load_model("mon_modele.h5")
IDE (Jupyter / Colab)
Le développement ML/DL se fait rarement dans un IDE classique (comme PyCharm/VS Code seul).
L'outil N°1 est Jupyter Notebook (ou Google Colab) car ils permettent un développement "interactif" (exécuter cellule par cellule, visualiser les données).
Google Colab est un Jupyter Notebook gratuit, hébergé par Google, qui fournit un accès **gratuit** à des **GPU** (NVIDIA T4, P100) et TPU.
TensorBoard (Monitoring)
TensorBoard est l'outil de visualisation de TF. Il permet de suivre l'entraînement (loss, accuracy), de visualiser le graphe du modèle, et de voir des images ou des embeddings.
from tensorflow.keras.callbacks import TensorBoard
# 1. Définir le "Callback"
log_dir = "logs/fit/mon_run"
tensorboard_callback = TensorBoard(log_dir=log_dir, histogram_freq=1)
# 2. Le passer à 'model.fit()'
model.fit(
x_train, y_train,
epochs=10,
callbacks=[tensorboard_callback]
)
# 3. Lancer TensorBoard (dans le terminal)
# (Pendant ou après l'entraînement)
tensorboard --logdir logs/fit
La force de TensorFlow réside dans son écosystème de déploiement "end-to-end".
| Outil | Cible | Description |
|---|---|---|
| TensorFlow Extended (TFX) | Production (Serveur) | Plateforme MLOps complète (Data, Validation, Training, Serving). |
| TensorFlow Serving | Production (Serveur) | Serveur C++ haute performance pour "servir" (exposer via API) des modèles SavedModel. |
| TensorFlow Lite (TFLite) | Mobile & IoT | Convertit les modèles TF pour tourner sur Android, iOS, et microcontrôleurs (ex: Raspberry Pi Pico). |
| TensorFlow.js (TF.js) | Navigateur (Client) | Permet d'exécuter (ou même d'entraîner) des modèles directement dans le navigateur (JavaScript). |
TensorFlow est massivement utilisé en production par les plus grandes entreprises technologiques pour des tâches critiques.
| Entreprise | Cas d'usage |
|---|---|
| Fondation de Google Search (RankBrain), Google Photos (reconnaissance), Google Translate, Google Assistant, YouTube (recommandation). | |
| DeepMind | (Alphabet/Google) Utilisé pour des recherches fondamentales (ex: AlphaFold pour la prédiction de protéines). |
| Airbnb | Classification d'images (pour les annonces), détection de fraude, personnalisation (prix, recherche). |
| Twitter (X) | Recommandation ("For You"), modération de contenu, filtrage de spam. |
| PayPal | Détection de fraude en temps réel (transactions suspectes). |
| Spotify | Recommandation musicale (Découvertes de la semaine). |
Ressources pour apprendre et travailler avec TensorFlow.
| Site | Description |
|---|---|
| tensorflow.org | Le site officiel. Point d'entrée pour les tutoriels, l'installation et la documentation de l'API. |
| keras.io | La documentation spécifique à Keras. Très claire, avec de nombreux guides et exemples de modèles. |
| Google Colab | (colab.research.google.com) L'outil N°1 pour débuter. Environnement Jupyter + GPU/TPU gratuits. |
| TensorFlow (Chaîne YouTube) | Tutoriels vidéo, "Coding Sessions" et présentations des nouveautés de l'écosystème. |
| Kaggle | Plateforme de compétitions de Data Science. De nombreux "Notebooks" (Kaggle Kernels) utilisent TF/Keras. |
Concepts de base (Tensors)
import tensorflow as tf # Tensors c = tf.constant([[1.0, 2.0], [3.0, 4.0]]) v = tf.Variable(5.0) # Ops a = tf.constant(10) b = tf.constant(20) c = tf.add(a, b) d = a @ b # (Matmul) # Gradient with tf.GradientTape() as tape: y = v * v grad = tape.gradient(y, v) # 10.0
Keras (Modèle Sequential)
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
# 1. Définir
model = Sequential([
Dense(64, activation='relu', input_shape=(784,)),
Dense(10, activation='softmax')
])
# 2. Compiler
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
# 3. Entraîner
model.fit(
x_train, y_train,
epochs=5,
batch_size=32
)
# 4. Prédire
preds = model.predict(x_test)
