Classification d’Images
Fonctions :
-
Classification d’Images (exemple)
La classification d’images est une tâche d’apprentissage supervisé où l’objectif est d’assigner une étiquette à une image parmi plusieurs classes. Elle repose généralement sur des réseaux de neurones convolutifs (CNN) qui extraient automatiquement les caractéristiques visuelles.
Importation :
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from tensorflow.keras.preprocessing.image import ImageDataGenerator
Attributs :
Paramètre Type Description Valeur par défaut batch_size
int Nombre d’images utilisées pour chaque mise à jour du modèle. 32
epochs
int Nombre de fois que le modèle parcourt l’ensemble des données d’entraînement. 10
steps_per_epoch
int Nombre d’étapes (lots d’images) par époque. nb_samples // batch_size
validation_split
float Fraction des données utilisée pour la validation. 0.2
Exemple de code :
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 1. Charger le dataset Fashion MNIST (X_train, y_train), (X_test, y_test) = tf.keras.datasets.fashion_mnist.load_data() # 2. Normalisation et reshaping X_train = X_train / 255.0 X_test = X_test / 255.0 X_train = X_train[..., np.newaxis] # (batch, 28, 28, 1) X_test = X_test[..., np.newaxis] # 3. Liste des classes class_names = ["T-shirt", "Pantalon", "Pull", "Robe", "Manteau", "Sandale", "Chemise", "Basket", "Sac", "Botte"] # 4. Construction du modèle CNN model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') # 10 classes ]) # 5. Compilation et entraînement model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(X_train, y_train, epochs=5, validation_split=0.1) # 6. Évaluation test_loss, test_acc = model.evaluate(X_test, y_test) print(f"\n✅ Accuracy sur les données de test : {test_acc:.4f}") # 7. Prédictions sur quelques images predictions = model.predict(X_test) plt.figure(figsize=(10, 5)) for i in range(10): plt.subplot(2, 5, i + 1) plt.imshow(X_test[i].squeeze(), cmap='gray') pred_class = class_names[np.argmax(predictions[i])] true_class = class_names[y_test[i]] plt.title(f"Préd: {pred_class}\nVrai: {true_class}") plt.axis('off') plt.tight_layout() plt.show()
Explication du code :
1. Chargement du dataset Fashion MNIST
- Dataset de 70 000 images (60 000 train / 10 000 test) en niveaux de gris (28x28 pixels). - Chaque image correspond à un vêtement appartenant à l'une des 10 classes.2. Prétraitement des données
- **Normalisation** des valeurs des pixels : division par 255. - **Ajout d’une dimension** pour le canal (passage à la forme `(28, 28, 1)`).3. Définition des noms de classes
- Liste descriptive des 10 catégories : `["T-shirt", "Pantalon", ..., "Botte"]`.4. Construction du modèle CNN
- **Architecture** : - `Conv2D(32)` + `MaxPooling2D(2x2)` - `Conv2D(64)` + `MaxPooling2D(2x2)` - `Flatten` - `Dense(128, relu)` - `Dense(10, softmax)` - **Forme d’entrée** : `(28, 28, 1)` - **Nombre de classes en sortie** : 10 (activation softmax).5. Compilation et entraînement
- **Optimiseur** : `Adam` - **Fonction de perte** : `sparse_categorical_crossentropy` (car `y_train` n’est pas encodé en one-hot). - **Métrique** : `accuracy` - Entraînement sur 5 époques avec 10% des données utilisées pour la validation.6. Évaluation
- Évaluation sur les données de test. - Affichage de la précision obtenue (`test_acc`).7. Prédictions et visualisation
- Prédiction sur 10 images de test. - Affichage de chaque image avec : - **Classe prédite** (`Préd:`) - **Classe réelle** (`Vrai:`)