Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🧠 TensorFlow – La Plateforme de Machine Learning

Guide complet IDEO-Lab : Tensors, Keras, @tf.function, GradientTape & TFX.

1.1 Facile

Vue d'ensemble

Plateforme ML/DL (Google). API Python (tf.keras).

Machine Learning Google
1.2 Moyen

Pourquoi TensorFlow ?

Scalabilité (GPU/TPU), Écosystème (TFX, JS, Lite), Production.

Scalabilité Production
1.3 Moyen

Installation (Python)

pip install tensorflow. Configuration GPU (CUDA, cuDNN).

pip CUDA
1.4 Facile

Concept N°1 : Les Tensors

Tableaux N-D (Scalaire, Vecteur, Matrice...). tf.Tensor.

Tensor Array N-D
2.1 Facile

Constants vs Variables

tf.constant (immuable) vs tf.Variable (muable, ex: Poids).

tf.constant tf.Variable
2.2 Facile

Opérations (Ops)

tf.add, tf.matmul, tf.linalg. Broadcasting.

tf.matmul Broadcasting
2.3 Avancé

Eager vs Graph (@tf.function)

Eager (Défaut, Python) vs Graph (Compilé, Opto) via @tf.function.

Eager @tf.function
2.4 Moyen

AutoDiff & GradientTape

tf.GradientTape pour calculer le gradient (Backpropagation).

GradientTape Autodiff
3.1 Facile

🧩 API Haut Niveau : Keras

tf.keras. L'API simple pour construire des réseaux.

tf.keras Abstraction
3.2 Facile

🧩 Keras : Layers (Couches)

Dense, Conv2D (CNN), Embedding, LSTM (RNN).

Dense Conv2D
3.3 Facile

🧩 Keras : Modèle Sequential

Modèle simple : une pile linéaire de couches.

Sequential Modèle
3.4 Moyen

🧩 Keras : Modèle Fonctionnel

Modèles complexes (multi-input, multi-output, "ResNet").

Functional API Modèle
4.1 Facile

🧩 Keras : compile & fit

optimizer, loss, metrics. model.fit(X, y).

.compile() .fit()
4.2 Moyen

Pipelines (tf.data)

API Dataset pour charger et pré-traiter les données (perf).

tf.data ETL
4.3 Facile

Sauvegarde & Chargement

model.save(). Formats SavedModel (défaut) et .h5 (Keras).

.save() SavedModel
4.4 Moyen

Outils (IDE & TensorBoard)

Jupyter/Colab. TensorBoard (visualisation).

Colab TensorBoard
5.1 Moyen

Écosystème (Déploiement)

TFX (Prod), TF Serving, TF Lite (Mobile), TF.js (Web).

TFX TF Lite TF.js
5.2 Facile

Vitrine (Qui l'utilise ?)

Google, Airbnb, Twitter/X, PayPal, DeepMind.

Google Airbnb
5.3 Facile

Liens Utiles & Formation

tensorflow.org, keras.io, Google Colab (gratuit).

Documentation Tutoriels
5.4 Facile

Cheat-sheet

Syntaxe Tensors, Keras Sequential, compile/fit.

cheat Keras
1.1 Vue d'ensemble : La Plateforme End-to-End
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)]
1.2 Pourquoi TensorFlow ? (Scalabilité & Production)

TensorFlow (TF) et PyTorch sont les deux leaders du Deep Learning. Le point fort historique de TF est son orientation **Production**.

Point FortDescription
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.
1.3 Installation (Python, CPU & GPU)

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.

  1. Installer les **Drivers NVIDIA** (via le site NVIDIA).
  2. Installer le **NVIDIA CUDA Toolkit** (version spécifique, voir la doc TF).
  3. Installer **cuDNN** (librairie NVIDIA pour le Deep Learning).
  4. 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)
1.4 Concept N°1 : Les Tensors

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)
2.1 tf.constant vs tf.Variable

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)
# 
2.2 Opérations (Ops)

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]]
2.3 Eager Execution vs Graph (@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, ...)
2.4 AutoDiff & tf.GradientTape

L'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.

3.1 🧩 L'API Haut Niveau : tf.keras

Keras é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
  1. Définir un Modèle : Une collection de Couches (Layers).
  2. Compiler le Modèle : Définir la fonction de Perte (loss), l'Optimiseur (optimizer) et les Métriques (metrics).
  3. Entraîner le Modèle : Appeler .fit() sur les données.
  4. Évaluer / Prédire : Appeler .evaluate() ou .predict().
3.2 🧩 Keras : Les Couches (Layers)

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)
CoucheUsage
Dense (Fully-Connected)Couche standard (y = activation(W*x + b)).
Conv2D (Convolution)Pour les **Images** (CNN). Détecte les "patterns" (contours, textures).
MaxPooling2DPour les **Images** (CNN). Réduit la taille (Downsampling).
EmbeddingPour 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.
FlattenAplatit un tensor (ex: sortie de Conv2D vers Dense).
DropoutRégularisation (prévient l'overfitting en "éteignant" des neurones).
3.3 🧩 Keras : Modèle Sequential

C'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()
3.4 🧩 Keras : Modèle Fonctionnel

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()
4.1 🧩 Keras : .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)
4.2 Pipelines de Données (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)
4.3 Sauvegarde & Chargement de Modèles

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")
4.4 Outils : IDEs & TensorBoard (Visualisation)
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
5.1 Écosystème (Déploiement)

La force de TensorFlow réside dans son écosystème de déploiement "end-to-end".

OutilCibleDescription
TensorFlow Extended (TFX)Production (Serveur)Plateforme MLOps complète (Data, Validation, Training, Serving).
TensorFlow ServingProduction (Serveur)Serveur C++ haute performance pour "servir" (exposer via API) des modèles SavedModel.
TensorFlow Lite (TFLite)Mobile & IoTConvertit 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).
5.2 Vitrine (Qui utilise TensorFlow ?)

TensorFlow est massivement utilisé en production par les plus grandes entreprises technologiques pour des tâches critiques.

EntrepriseCas d'usage
GoogleFondation 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).
AirbnbClassification d'images (pour les annonces), détection de fraude, personnalisation (prix, recherche).
Twitter (X)Recommandation ("For You"), modération de contenu, filtrage de spam.
PayPalDétection de fraude en temps réel (transactions suspectes).
SpotifyRecommandation musicale (Découvertes de la semaine).
5.4 Cheat-sheet (TensorFlow & 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)