L'objectif de ce référentiel est de contenir du code propre, lisible et testé pour reproduire la recherche d'apprentissage à quelques coups.
Ce projet est écrit dans Python 3.6 et Pytorch et suppose que vous avez un GPU.
Voir ces articles moyens pour plus d'informations
Listé dans requirements.txt . Installer avec pip install -r requirements.txt de préférence dans un virtualenv.
Modifiez la variable DATA_PATH dans config.py à l'emplacement où vous stockez les ensembles de données Omniglot et MiniImageNet.
Après avoir acquis les données et exécuté les scripts de configuration, votre structure de dossier devrait ressembler
DATA_PATH/
Omniglot/
images_background/
images_evaluation/
miniImageNet/
images_background/
images_evaluation/
Ensemble de données omniglot . Télécharger depuis https://github.com/brendenlake/omniglot/tree/master/python, placez les fichiers extraits dans DATA_PATH/Omniglot_Raw et exécutez scripts/prepare_omniglot.py
Ensemble de données MiniImageNet . Téléchargez des fichiers à partir de https://drive.google.com/file/d/0b3irx3uqnobmq1flnxjszudywee/view, placez-le dans data/miniImageNet/images et exécutez scripts/prepare_mini_imagenet.py
Après avoir ajouté les ensembles de données, exécutez pytest dans le répertoire racine pour exécuter tous les tests.
Le fichier experiments/experiments.txt contient les hyperparamètres que j'ai utilisés pour obtenir les résultats donnés ci-dessous.

Exécutez experiments/proto_nets.py pour reproduire les résultats des réseaux prototpyicaux pour l'apprentissage à quelques tirs (Snell et al).
Arguments
| Omniglot | ||||
|---|---|---|---|---|
| k-way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| Publié | 98.8 | 99.7 | 96.0 | 98.9 |
| Ce repo | 98.2 | 99.4 | 95.8 | 98.6 |
| minimagenet | ||
|---|---|---|
| k-way | 5 | 5 |
| n-shot | 1 | 5 |
| Publié | 49.4 | 68.2 |
| Ce repo | 48.0 | 66.2 |
Un classificateur de voisins le plus proche différenciable.

Exécutez experiments/matching_nets.py pour reproduire les résultats des réseaux correspondants pour un apprentissage par un plan (Vinyals et al).
Arguments
J'ai eu du mal à reproduire les résultats de cet article en utilisant la métrique de distance du cosinus car j'ai trouvé que le converge était lent et les performances finales dépendant de l'initialisation aléatoire. Cependant, j'ai pu reproduire (et légèrement dépasser) les résultats de cet article en utilisant la métrique de distance L2.
| Omniglot | ||||
|---|---|---|---|---|
| k-way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| Publié (Cosin) | 98.1 | 98.9 | 93.8 | 98.5 |
| Ce repo (cosinus) | 92.0 | 93.2 | 75.6 | 77.8 |
| Ce repo (L2) | 98.3 | 99.8 | 92.8 | 97.8 |
| minimagenet | ||
|---|---|---|
| k-way | 5 | 5 |
| n-shot | 1 | 5 |
| Publié (Cosine, FCE) | 44.2 | 57.0 |
| Ce repo (Cosine, FCE) | 42.8 | 53.6 |
| Ce repo (L2) | 46.0 | 58.4 |

J'ai utilisé la mise en commun maximale au lieu de convolutions accélérées afin d'être cohérente avec les autres papiers. Les expériences MiniImagenet utilisant MAML en 2e ordre m'ont pris plus d'une journée pour courir.
Exécutez experiments/maml.py pour reproduire les résultats de la méta-apprentissage du modèle-agnostique (Finn et al).
Arguments
NB: Pour MAML N, K et Q sont fixés entre le train et le test. Vous devrez peut-être ajuster la taille de la méta-lot pour s'adapter à votre GPU. 2e commande MAML utilise beaucoup plus de mémoire.
| Omniglot | ||||
|---|---|---|---|---|
| k-way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| Publié | 98.7 | 99.9 | 95.8 | 98.9 |
| Ce repo (1) | 95.5 | 99.5 | 92.2 | 97.7 |
| Ce repo (2) | 98.1 | 99.8 | 91.6 | 95.9 |
| minimagenet | ||
|---|---|---|
| k-way | 5 | 5 |
| n-shot | 1 | 5 |
| Publié | 48.1 | 63.2 |
| Ce repo (1) | 46.4 | 63.3 |
| Ce repo (2) | 47.5 | 64.7 |
Le nombre entre parenthèses indique le 1er ou le 2ème ordre MAML.