Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🧩 Keras – L'API "Humaine" du Deep Learning

Guide complet IDEO-Lab : API tf.keras, Sequential, Functional, compile, fit.

1.1 Facile

Vue d'ensemble

API Haut Niveau pour TensorFlow (tf.keras). "Deep Learning for humans".

API Haut Niveau tf.keras
1.2 Facile

Pourquoi Keras ?

Simplicité (vs PyTorch), prototypage rapide, API simple.

Simplicité R&D
1.3 Facile

Installation

Keras est **inclus** dans TensorFlow. pip install tensorflow.

Inclus (TF) pip
1.4 Facile

🔁 Le Workflow Keras

compile(), fit(), evaluate(), predict().

compile fit
2.1 Facile

Modèle 1 : Sequential

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

Sequential Modèle
2.2 Moyen

Modèle 2 : API Fonctionnelle

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

Functional API Modèle
2.3 Avancé

Modèle 3 : Subclassing

Hériter de keras.Model (Style PyTorch). Contrôle total.

Subclassing call()
2.4 Facile

Layers (Core)

Input, Dense, Activation, Flatten, Dropout.

Dense ReLU
3.1 Moyen

Layers (CNN - Vision)

Conv2D, MaxPooling2D, BatchNormalization.

Conv2D CNN
3.2 Moyen

Layers (RNN - Texte)

Embedding, LSTM, GRU, TextVectorization.

Embedding LSTM
3.3 Moyen

Gestion des Données

Intégration tf.data.Dataset (perf) ou NumPy (simple).

tf.data NumPy
3.4 Facile

Sauvegarde & Chargement

model.save(), load_model(). (SavedModel ou .h5).

.save() SavedModel
4.1 Facile

.compile() (Loss)

Fonctions de Perte. 'binary_crossentropy', 'mse'...

compile loss
4.2 Facile

.compile() (Optimizer)

Optimiseurs. 'adam', 'sgd', 'rmsprop'.

compile optimizer
4.3 Moyen

.fit() (Entraînement)

epochs, batch_size, validation_data.

fit epochs
4.4 Moyen

Callbacks (.fit())

EarlyStopping, ModelCheckpoint (sauvegarde).

Callbacks EarlyStopping
5.1 Facile

Évaluation & Prédiction

model.evaluate() (Test set), model.predict() (Nouveau).

evaluate predict
5.2 Moyen

Écosystème

KerasCV, KerasNLP. Déploiement (TFX, TF Lite, TF.js).

KerasCV TF Lite
5.3 Facile

Vitrine (Qui l'utilise ?)

Netflix, NASA, Uber, CERN. (Tous ceux qui utilisent TF).

Netflix NASA
5.4 Facile

Liens Utiles & Formation

keras.io (Docs), Guides tensorflow.org/keras.

keras.io Tutoriels
5.5 Facile

Cheat-sheet

Workflow complet : Sequential, compile, fit.

cheat Workflow
1.1 Vue d'ensemble : "Deep Learning for humans"
Qu'est-ce que Keras ?

Keras est une **API (interface) haut niveau** de Deep Learning, écrite en Python, créée par François Chollet.

Sa philosophie est d'être **simple, flexible et puissante** ("Deep Learning for humans"). Elle abstrait la complexité mathématique (Tensors, Gradients).

Keras & TensorFlow

Historiquement, Keras était une API "multi-backend" (pouvait tourner sur Theano, CNTK ou TensorFlow).

Depuis 2019 (TensorFlow 2.0), Keras est devenu l'API haut niveau **officielle et intégrée** de TensorFlow. On l'utilise via tensorflow.keras (ou tf.keras).

Diagramme : La Place de Keras
+-------------------------+
| Utilisateur (Vous)      |
+-------------------------+
      | (API Simple)
      ▼
+-------------------------+
| Keras (tf.keras)        |
| (Layers, Model, fit())  |
+-------------------------+
      | (Moteur "backend")
      ▼
+-------------------------+
| TensorFlow (Core)       |
| (Tensors, Gradients, Graph)|
+-------------------------+
      | (Exécution)
      ▼
[  CPU / GPU / TPU  ]
1.2 Pourquoi Keras ? (Simplicité vs Flexibilité)
Le Problème (TF 1.x / PyTorch)

Écrire un réseau en TensorFlow 1.x (graphes statiques) ou même en PyTorch (boucle manuelle) est verbeux. Il faut gérer :

  • La boucle d'entraînement (for epoch...)
  • La boucle sur les batchs (for inputs...)
  • La RAZ des gradients (zero_grad())
  • Le Forward pass (model(inputs))
  • Le calcul de la Loss (criterion(...))
  • Le Backward pass (loss.backward())
  • La mise à jour des poids (optimizer.step())
La Solution (.fit())

Keras masque **toute** cette complexité (vue en 1.1) dans trois commandes simples :

  1. model.compile(...) : "Quoi optimiser et comment le mesurer ?"
  2. model.fit(...) : "Entraîne-toi sur ces données pendant X epochs."
  3. model.evaluate(...) : "Quel est ton score final ?"

C'est l'API **idéale pour le prototypage rapide**, l'enseignement, et la plupart des applications standards de ML/DL.

1.3 Installation

Keras n'est **pas** un paquet séparé. Il est **inclus** dans tensorflow.

(Si vous voyez pip install keras, c'est l'ancienne version "multi-backend" ou le nouveau "Keras Core 3.0" qui est différent. Pour 99% des usages, on utilise tf.keras).

Installation (via TensorFlow)
# 1. (Recommandé) Créer un environnement virtuel
python -m venv tf_env
source tf_env/bin/activate

# 2. Installer TensorFlow (Keras est inclus)
pip install tensorflow

# 3. Import en Python
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

print(tf.__version__)
1.4 🔁 Le Workflow Keras (compile, fit, evaluate)

C'est le "diagramme mental" de Keras. 90% des modèles suivent ce flux.

from tensorflow import keras
from tensorflow.keras import layers

# --- 1. Définir le Modèle (Architecture) ---
model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(10, activation='softmax')
])

# --- 2. Compiler le Modèle (Configurer) ---
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)

# --- 3. Entraîner le Modèle (Apprentissage) ---
model.fit(
    x_train, 
    y_train, 
    epochs=5,
    batch_size=32,
    validation_data=(x_val, y_val)
)

# --- 4. Évaluer le Modèle (Test) ---
results = model.evaluate(x_test, y_test)
print(f"Test Loss: {results[0]}, Test Accuracy: {results[1]}")

# --- 5. Prédire (Inférence) ---
predictions = model.predict(x_new_data)
2.1 Modèle 1 : L'API Sequential

Le Sequential est le modèle le plus simple. C'est une pile linéaire de couches. (Parfait pour les CNN, MLP, et RNN simples).

Syntaxe 1 : Liste dans le constructeur (Préférée)
model = keras.Sequential([
    layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)),
    layers.MaxPooling2D((2,2)),
    layers.Flatten(),
    layers.Dense(10, activation='softmax')
], name="mon_cnn_simple")
Syntaxe 2 : .add()
model = keras.Sequential(name="mon_cnn_simple")
model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(10, activation='softmax'))

// Visualiser le modèle
model.summary()
2.2 Modèle 2 : L'API Fonctionnelle

L'API Fonctionnelle est utilisée pour les modèles complexes : graphes (non-linéaires), multi-input, multi-output, ou connexions résiduelles (ResNet).

L'idée : 1. Définir un Input. 2. "Appeler" les couches sur les Tensors. 3. Définir le Model.

Exemple (Multi-Input)
from tensorflow.keras import Model
from tensorflow.keras.layers import Input, Dense, concatenate

# 1. Définir les Entrées
input_A = Input(shape=(32,), name="Input_Texte")
input_B = Input(shape=(64,), name="Input_Metadata")

# 2. Branche A
x = Dense(16, activation='relu')(input_A)

# 3. Branche B
y = Dense(32, activation='relu')(input_B)

# 4. Combiner (Concaténer)
combined = concatenate([x, y])

# 5. Sortie
output = Dense(1, activation='sigmoid', name="Output")(combined)

# 6. Créer le Modèle
model = Model(inputs=[input_A, input_B], outputs=output)

model.summary()
2.3 Modèle 3 : Subclassing (Style PyTorch)

Pour un contrôle total (ex: R&D), on peut hériter de keras.Model (similaire à nn.Module en PyTorch).

  • __init__(self) : Définir les couches (qui ont des poids).
  • call(self, x) : Définir le "forward pass" (la logique).
Exemple (Modèle simple)
class SimpleNet(keras.Model):
    
    def __init__(self):
        super(SimpleNet, self).__init__()
        # 1. Définir les couches
        self.dense1 = layers.Dense(64, activation='relu')
        self.dense2 = layers.Dense(10, activation='softmax')
        
    def call(self, inputs):
        # 2. Définir la logique "forward"
        x = self.dense1(inputs)
        return self.dense2(x)

# Instancier
model = SimpleNet()

Inconvénient : Plus difficile à déboguer et model.summary() ne montre pas les connexions (car défini en runtime).

2.4 Layers (Couches de Base)
Couche (layers.*)Description
InputDéfinit la shape d'entrée (pour l'API Fonctionnelle).
DenseCouche "Fully-Connected" (y = W*x + b). La couche la plus commune.
ActivationApplique une fonction d'activation ('relu', 'sigmoid', 'softmax'). (Souvent intégré dans Dense(activation=...)).
FlattenAplatit un tensor (ex: (Batch, 28, 28) -> (Batch, 784)) pour connecter un CNN à un Dense.
DropoutRégularisation. "Éteint" aléatoirement des neurones (pendant l'entraînement) pour éviter l'overfitting.
3.1 Layers (CNN - Vision)

(Pour les Réseaux de Neurones Convolutifs - Vision par Ordinateur)

Couche (layers.*)Description
Conv2D(Convolution) L'opération principale. Applique des "filtres" (kernels) pour détecter des features (contours, textures...).
MaxPooling2D(Pooling) Réduit la taille de l'image (Downsampling) en gardant la valeur max (ex: 2x2 -> 1x1). Réduit le coût de calcul.
AveragePooling2DSimilaire à Max, mais prend la moyenne.
BatchNormalizationNormalise la sortie d'une couche. Accélère et stabilise l'entraînement.
3.2 Layers (RNN - Texte & Séquences)

(Pour les Réseaux Récurrents - NLP, Séries Temporelles)

Couche (layers.*)Description
TextVectorizationCouche de preprocessing (intégrée) qui transforme le texte (string) en tokens (IDs entiers).
EmbeddingCouche (obligatoire) pour le NLP. Transforme les tokens (IDs) en vecteurs denses (Word Embeddings).
LSTM (Long Short-Term Memory)Couche récurrente (avec "mémoire") pour traiter les séquences.
GRU (Gated Recurrent Unit)Alternative plus simple (et souvent aussi performante) que LSTM.
3.3 Gestion des Données (Input)

model.fit() accepte plusieurs types d'entrées :

1. NumPy Arrays (Simple)

Pour les petits datasets qui tiennent en mémoire (RAM).

(x_train, y_train) = load_mnist_data()
// x_train est un array NumPy

model.fit(x_train, y_train, ...)
2. tf.data.Dataset (Performant)

Pour les gros datasets (streaming depuis le disque) ou le preprocessing à la volée.

// (Voir le guide TensorFlow 4.2)
dataset = tf.data.Dataset.from_tensor_slices(...)
dataset = dataset.map(preprocess_fn)
dataset = dataset.batch(32)
dataset = dataset.prefetch(tf.data.AUTOTUNE)

model.fit(dataset, epochs=5)
3.4 Sauvegarde & Chargement de Modèles

Sauvegarder l'architecture ET les poids (weights) du modèle après l'entraînement.

Format SavedModel (Dossier)

Format par défaut de TF 2.x. Sauvegarde tout (poids, architecture, traces @tf.function) dans un dossier. Requis pour TF Serving ou TFX.

# 1. Sauvegarder
model.save("mon_modele_dossier")

# 2. Charger
new_model = keras.models.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
new_model = keras.models.load_model("mon_modele.h5")
4.1 .compile() : Loss & Métriques

Loss (Perte) : Ce que le modèle doit minimiser. (L'erreur).

TâcheLoss (String ou keras.losses.*)Description
Classification Binaire'binary_crossentropy'(1 sortie, activation 'sigmoid').
Classification Multi-classe'categorical_crossentropy'(N sorties, 'softmax'). y doit être en One-Hot (ex: [0, 0, 1]).
Classification Multi-classe'sparse_categorical_crossentropy'(N sorties, 'softmax'). y est un entier (ex: 2). (Préféré).
Régression'mean_squared_error' (MSE)(1 sortie, 'linear').

Metrics : Ce que l'on veut surveiller (pour les humains). Ex: metrics=['accuracy', 'mae'].

4.2 .compile() : Optimiseurs

L'optimiseur est l'algorithme (Descente de Gradient) qui met à jour les poids pour minimiser la Loss.

Optimiseur (keras.optimizers.*)Description
'adam' (ou Adam(lr=...))Le défaut (99% des cas). Robuste, rapide, s'adapte (Momentum + RMSProp).
'sgd' (ou SGD(lr=...))Descente de Gradient Stochastique (simple).
'rmsprop'Bon choix (historique) pour les RNNs.
// Syntaxe 1: String (avec défauts)
model.compile(optimizer='adam', ...)

// Syntaxe 2: Objet (pour changer le learning rate)
from tensorflow.keras.optimizers import Adam
model.compile(optimizer=Adam(learning_rate=0.001), ...)
4.3 .fit() (Entraînement & Callbacks)

model.fit() est la fonction qui lance la boucle d'entraînement (backpropagation).

model.fit()

Retourne un objet History (history.history['loss']) qui contient l'historique de la loss et des métriques (epoch par epoch).

history = model.fit(
    x_train,            // Données d'entraînement
    y_train,            // Labels d'entraînement
    epochs=10,          // (Combien de fois voir tout le dataset)
    batch_size=32,      // (Combien d'items par mise à jour des poids)
    validation_data=(x_val, y_val), // (Données pour évaluer (pas entraîner))
    # ou validation_split=0.2       // (Prend 20% de x_train pour val)
    callbacks=[...]     // (Actions (voir onglet 2))
)
Callbacks

Les "Callbacks" sont des "hooks" (points d'arrêt) appelés pendant .fit() (ex: à la fin de chaque epoch).

EarlyStopping (Essentiel) : Arrête l'entraînement si la performance (sur validation_data) stagne ou se dégrade (évite l'overfitting).

ModelCheckpoint : Sauvegarde le modèle (ex: uniquement le meilleur .h5).

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

// (Arrête si 'val_loss' n'a pas baissé
// depuis 'patience'=3 epochs)
cb_early_stop = EarlyStopping(
    monitor='val_loss', 
    patience=3
)

// (Sauvegarde le meilleur modèle (basé sur 'val_loss'))
cb_checkpoint = ModelCheckpoint(
    filepath="best_model.h5",
    monitor='val_loss',
    save_best_only=True
)

model.fit(
    ...,
    callbacks=[cb_early_stop, cb_checkpoint]
)
4.4 Callbacks (.fit())

Les "Callbacks" sont des "hooks" (points d'arrêt) appelés pendant .fit() (ex: à la fin de chaque epoch).

EarlyStopping (Essentiel) : Arrête l'entraînement si la performance (sur validation_data) stagne ou se dégrade (évite l'overfitting).

ModelCheckpoint : Sauvegarde le modèle (ex: uniquement le meilleur .h5).

from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint

// (Arrête si 'val_loss' n'a pas baissé
// depuis 'patience'=3 epochs)
cb_early_stop = EarlyStopping(
    monitor='val_loss', 
    patience=3
)

// (Sauvegarde le meilleur modèle (basé sur 'val_loss'))
cb_checkpoint = ModelCheckpoint(
    filepath="best_model.h5",
    monitor='val_loss',
    save_best_only=True
)

model.fit(
    ...,
    callbacks=[cb_early_stop, cb_checkpoint]
)
5.1 Évaluation & Prédiction
.evaluate() (Test)

Calcule la loss et les metrics (définies dans .compile()) sur un dataset (ex: Test set).

results = model.evaluate(x_test, y_test)

print(results)
// [0.123, 0.981] (Ex: [loss, accuracy])
.predict() (Inférence)

Génère les sorties brutes du modèle (ex: logits ou probabilités) pour de nouvelles données.

predictions_proba = model.predict(x_new)

// (predictions_proba[0] ->
// [0.01, 0.05, 0.9, 0.04...])

// (Pour avoir la classe prédite (l'index max))
import numpy as np
predictions_class = np.argmax(predictions_proba, axis=1)
// [2]
5.2 Écosystème (KerasCV, NLP, TFX, Lite)

L'écosystème Keras est (principalement) l'écosystème TensorFlow, qui utilise les modèles Keras comme entrée.

OutilDescription
KerasCV / KerasNLPBibliothèques "standalone" (pip install keras-cv) fournissant des couches de pointe (ex: Data Augmentation, Transformers) et des modèles pré-entraînés.
TFX (TensorFlow Extended)Plateforme MLOps (Production). Utilise un modèle Keras comme entrée pour un pipeline de déploiement.
TF Lite (TFLite)Convertit un SavedModel Keras en format .tflite optimisé pour le mobile (Android/iOS).
TensorFlow.js (TF.js)Convertit un SavedModel Keras pour l'exécuter dans le navigateur (JavaScript).
5.3 Vitrine (Qui utilise Keras ?)

Keras (en tant que tf.keras) est utilisé par toutes les entreprises qui s'appuient sur l'écosystème TensorFlow pour le prototypage et la production.

EntrepriseCas d'usage
Netflix(Utilise TF/Keras) Recommandation de contenu, optimisation des artworks (miniatures).
NASADétection d'exoplanètes (analyse des courbes de lumière), recherche sur le climat (analyse d'images satellites).
CERNAnalyse des données du LHC (ex: filtrage d'événements, reconstruction de particules) en utilisant Keras/TF.
UberPrévision de la demande (pricing), optimisation des trajets (Horovod, basé sur TF).
5.5 Cheat-sheet (Workflow Keras)
1. Imports & Data
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.callbacks import EarlyStopping

# (Data (ex: NumPy)
# x_train, y_train, x_test, y_test
2. Définir (Sequential)
model = keras.Sequential([
    layers.Dense(
        64, 
        activation='relu', 
        input_shape=(784,)
    ),
    layers.Dropout(0.5),
    layers.Dense(
        10, 
        activation='softmax'
    )
])
3. Visualiser
model.summary()
4. Compiler
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)
5. Entraîner (Fit)
cb_stop = EarlyStopping(
    monitor='val_loss', 
    patience=3
)

history = model.fit(
    x_train, y_train,
    epochs=50,
    batch_size=32,
    validation_split=0.2,
    callbacks=[cb_stop]
)
6. Évaluer & Sauvegarder
results = model.evaluate(x_test, y_test)
preds = model.predict(x_new)
model.save("mon_modele.h5")