Siamese Modele et Contrastive Loss
Importation des bibliothèques nécessaires
Explication :
tensorflow
et ses sous-modules (tf
,Model
,Input
,Flatten
,Dense
,Dropout
,Lambda
,RMSprop
,fashion_mnist
,plot_model
,K
) sont importés pour construire et entraîner le modèle.numpy
(np
) est utilisé pour les opérations sur les tableaux.matplotlib.pyplot
(plt
) est utilisé pour la visualisation des données.PIL
(Image
,ImageFont
,ImageDraw
) est utilisé pour le traitement des images.random
est utilisé pour générer des nombres aléatoires.
Définition de la fonction de perte contrastive
Explication :
- Cette fonction définit la perte contrastive, qui est utilisée pour entraîner les réseaux siamois.
margin
est une constante qui définit la marge de séparation entre les paires similaires et dissimilaires.- La fonction retourne la moyenne de la perte contrastive calculée pour chaque paire d’images.
Définition du modèle siamois
Explication :
- Cette fonction crée le réseau de base pour le modèle siamois.
Input
définit la forme de l’entrée.Flatten
aplatit l’entrée en un vecteur 1D.Dense
ajoute des couches entièrement connectées avec une activation ReLU.Dropout
ajoute une couche de dropout pour éviter le surapprentissage.Model
compile le modèle avec l’entrée et la sortie définies.
Création du modèle siamois
Explication :
- Cette fonction crée le réseau siamois en utilisant le réseau de base.
base_network
est créé en appelantcreate_base_network
.Input
définit les entrées pour les deux branches du réseau siamois.processed_a
etprocessed_b
sont les sorties des branches après avoir passé par le réseau de base.Lambda
calcule la distance euclidienne entre les sorties des deux branches.Model
compile le modèle avec les entrées et la sortie définies.
Définition de la distance euclidienne
Explication :
euclidean_distance
calcule la distance euclidienne entre deux vecteurs.eucl_dist_output_shape
définit la forme de la sortie de la distance euclidienne.
Chargement et préparation des données
Explication :
- Les données Fashion MNIST sont chargées et divisées en ensembles d’entraînement et de test.
- Les images sont normalisées en divisant par 255 pour que les valeurs soient comprises entre 0 et 1.
Création des paires d’images
Explication :
- Cette fonction crée des paires d’images similaires et dissimilaires.
pairs
stocke les paires d’images.labels
stocke les étiquettes (1 pour similaire, 0 pour dissimilaire).n
est le nombre minimum d’images pour chaque classe.- Les paires similaires et dissimilaires sont créées en utilisant des indices aléatoires.
Préparation des indices des classes
Explication :
- Cette fonction crée une liste d’indices pour chaque classe dans les étiquettes.
digit_indices
stocke les indices des images pour chaque classe.
Création des paires d’entraînement et de test
Explication :
- Les indices des classes sont créés pour les ensembles d’entraînement et de test.
- Les paires d’images et les étiquettes sont créées pour les ensembles d’entraînement et de test.
Compilation et entraînement du modèle
Explication :
- La forme de l’entrée est définie.
- Le modèle siamois est créé en appelant
create_siamese_network
. - Le modèle est compilé avec la perte contrastive et l’optimiseur RMSprop.
- Le modèle est entraîné sur les paires d’entraînement avec une taille de lot de 128 et 20 époques.
Évaluation du modèle
Explication :
- Le modèle fait des prédictions sur les paires de test.
Visualisation des résultats
Explication :
- La fonction
compute_accuracy
calcule l’exactitude des prédictions. - L’exactitude est calculée en comparant les prédictions aux étiquettes réelles.
- L’exactitude est affichée.
Visualisation des paires d’images
Explication :
- La fonction
plot_pairs
affiche les paires d’images avec leurs étiquettes. - Les paires d’entraînement et de test sont visualisées.