Création d’un réseau d’apprentissage unique avec PyTorch
Comment construire un réseau profond avec si peu d’échantillons pour chaque classe?
Le jeu de données de caractères manuscrits Omniglot est un jeu de données pour l’apprentissage ponctuel, proposé par Lake et al. Il contient 1623 caractères manuscrits différents de 50 séries d’alphabets différentes, où chaque caractère a été écrit à la main par 20 personnes différentes. Chaque image mesure 105 x 105 pixels. Les 50 alphabets sont divisés en un ratio de 30:20 pour la formation et les tests, ce qui signifie que le jeu de test se trouve sur un tout nouveau jeu de caractères qui n’est jamais vu auparavant.
La formation et l’expérience ont été effectuées uniquement via Google Colab, avec une gamme de GPU, y compris Tesla K80 et P100. Nous avons utilisé des bibliothèques comme Numpy, Matplotlib et PyTorch.
Les réseaux profonds traditionnels ne fonctionnent généralement pas bien avec un ou plusieurs plans d’apprentissage, car très peu d’échantillons par classe sont très susceptibles de provoquer un surapprentissage. Pour éviter le problème de surajustement et l’étendre aux personnages invisibles, nous avons proposé d’utiliser le Siamese Network.
Train et chargeur de données de validation
Pour former le réseau siamois, nous devons d’abord générer l’entrée appropriée (par paires) et définir l’étiquette de vérité terrain pour le modèle.
Test Loader
L’évaluation d’un réseau sur ses performances en apprentissage one-shot peut se faire via une métrique d’évaluation one-way one-shot learning, où l’on retrouve n images représentant n catégories et une image principale qui appartient à l’une des n catégories. Pour notre réseau siamois, nous avons calculé la similitude des images principales avec les n images, et la paire avec la similitude la plus élevée signifie que l’image principale appartient à la classe.
Expérience 1. Réseau siamois traditionnel pour l’apprentissage ponctuel
Expérience 2. Ajout de la normalisation par lots
Expérience 3. Échange du ConvNet avec un VGG16 léger
Après avoir bien fonctionné le réseau d’origine, nous pouvons également tester différents CNN bien établis pour notre réseau siamois et voir si nous pouvons obtenir de meilleurs résultats. Avec la petite taille d’image de 105×105, nous voulions utiliser un réseau relativement plus petit avec peu de couches, mais produisant toujours des résultats décents, et nous avons donc emprunté l’architecture réseau de VGG16.
Évaluation sur le modèle
Le code d’évaluation d’un réseau est implémenté comme suit:
Alors voilà! Voici comment créer un réseau siamois convolutif pour l’apprentissage en une seule fois de l’ensemble de données Omniglot. Le code complet est également publié sur Github dans le répertoire suivant: