Créer un AutoEncoder
Pour construire votre premier AutoEncoder avec TensorFlow, suivez ces étapes. Un AutoEncoder est un type de réseau de neurones utilisé pour apprendre une représentation comprimée (ou codée) de données, généralement pour des tâches de réduction de dimensionnalité ou de débruitage.
1. Importer les bibliothèques nécessaires
import tensorflow as tffrom tensorflow.keras import layers, modelsimport numpy as npimport matplotlib.pyplot as plt
2. Charger et préparer les données (par exemple, le dataset MNIST)
On utilise ici les images de chiffres manuscrits (MNIST) comme exemple de données pour entraîner l’AutoEncoder.
# Charger le dataset MNIST(x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data()
# Normaliser les images à une échelle [0, 1]x_train = x_train.astype('float32') / 255.x_test = x_test.astype('float32') / 255.
# Reshaper les données pour qu'elles soient compatibles avec un réseau de neurones convolutifx_train = np.reshape(x_train, (len(x_train), 28, 28, 1))x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))
3. Construire l’architecture de l’AutoEncoder
Un AutoEncoder classique comporte deux parties principales :
- L’encodeur : compresse les données d’entrée en une dimension plus petite (bottleneck).
- Le décodeur : reconstruit les données à partir de la représentation codée.
Encodeur
def build_autoencoder(): # Partie encodeur encoder_input = layers.Input(shape=(28, 28, 1)) x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(encoder_input) x = layers.MaxPooling2D((2, 2), padding='same')(x) x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x) encoder_output = layers.MaxPooling2D((2, 2), padding='same')(x)
# Partie décodeur x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoder_output) x = layers.UpSampling2D((2, 2))(x) x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(x) x = layers.UpSampling2D((2, 2))(x) decoder_output = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
# Modèle AutoEncoder complet autoencoder = models.Model(encoder_input, decoder_output) return autoencoder
4. Compiler le modèle
Utilisez une fonction de perte qui évalue la différence entre l’image d’entrée et l’image reconstruite. Par exemple, la perte mse
(erreur quadratique moyenne) est souvent utilisée.
autoencoder = build_autoencoder()
# Compilation du modèleautoencoder.compile(optimizer='adam', loss='mse')
5. Entraîner l’AutoEncoder
Entraînez le modèle pour reconstruire les images.
autoencoder.fit(x_train, x_train, epochs=10, batch_size=128, shuffle=True, validation_data=(x_test, x_test))
6. Visualiser les résultats
Après l’entraînement, vous pouvez visualiser certaines des images reconstruites pour voir comment l’AutoEncoder fonctionne.
# Prédictions sur le jeu de testdecoded_images = autoencoder.predict(x_test)
# Affichage de quelques images originales et reconstruitesn = 10 # Nombre d'images à afficherplt.figure(figsize=(20, 4))for i in range(n): # Images originales ax = plt.subplot(2, n, i + 1) plt.imshow(x_test[i].reshape(28, 28), cmap='gray') plt.axis('off')
# Images reconstruites ax = plt.subplot(2, n, i + 1 + n) plt.imshow(decoded_images[i].reshape(28, 28), cmap='gray') plt.axis('off')plt.show()
Conclusion
Félicitations ! Vous venez de construire et d’entraîner un AutoEncoder simple avec TensorFlow.