Das Ziel für dieses Repository ist es, saubere, lesbare und getestete Code zu enthalten, um nur wenige Schusslernforschung zu reproduzieren.
Dieses Projekt ist in Python 3.6 und Pytorch geschrieben und geht davon aus, dass Sie eine GPU haben.
Weitere Informationen finden Sie in diesen mittleren Artikeln
In requirements.txt aufgelistet.txt. Installieren Sie mit pip install -r requirements.txt vorzugsweise in einem virtuellenv.
Bearbeiten Sie die Variable DATA_PATH in config.py an dem Ort, an dem Sie die Omniglot- und Miniimagenet -Datensätze speichern.
Nachdem Sie die Daten erfasst und die Setup -Skripte ausgeführt haben, sollte Ihre Ordnerstruktur nachsehen
DATA_PATH/
Omniglot/
images_background/
images_evaluation/
miniImageNet/
images_background/
images_evaluation/
Omniglot -Datensatz. Laden Sie von https://github.com/brendenlake/omniglot/tree/master/python herunter, platzieren Sie die extrahierten Dateien in DATA_PATH/Omniglot_Raw scripts/prepare_omniglot.py führen
Miniimagenet -Datensatz. Laden scripts/prepare_mini_imagenet.py Dateien von https://drive.google.com/file/d/0b3irx3uqnobmq1flnxjszudywee/Ve data/miniImageNet/images
Nach dem Hinzufügen der Datensätze führen Sie pytest im Stammverzeichnis aus, um alle Tests auszuführen.
Die Dateiversuche experiments/experiments.txt enthält die Hyperparameter, mit denen ich die nachstehend angegebenen Ergebnisse erhalten habe.

Führen Sie experiments/proto_nets.py aus, um Ergebnisse aus prototpyischen Netzwerken für wenige Shot-Lernen zu reproduzieren (Snell et al.).
Argumente
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| N-Shot | 1 | 5 | 1 | 5 |
| Veröffentlicht | 98,8 | 99.7 | 96.0 | 98,9 |
| Dieses Repo | 98.2 | 99.4 | 95.8 | 98.6 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| N-Shot | 1 | 5 |
| Veröffentlicht | 49,4 | 68,2 |
| Dieses Repo | 48.0 | 66,2 |
Ein differenzierbarer Klassifikator der nächsten Nachbarn.

Führen Sie experiments/matching_nets.py aus, um Ergebnisse aus passenden Netzwerken für ein Schusslernen zu reproduzieren (Vinyals et al.).
Argumente
Ich hatte Probleme, die Ergebnisse dieses Papiers unter Verwendung der Cosinus Distance Metrik zu reproduzieren, da ich feststellte, dass der Konverge langsam und endgültig von der zufälligen Initialisierung abhängt. Ich konnte jedoch die Ergebnisse dieses Papiers mit der L2 -Entfernungsmetrik reproduzieren (und etwas überschreiten).
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| N-Shot | 1 | 5 | 1 | 5 |
| Veröffentlicht (Cosinus) | 98.1 | 98,9 | 93.8 | 98,5 |
| Dieses Repo (Cosinus) | 92.0 | 93.2 | 75,6 | 77,8 |
| Dieses Repo (L2) | 98.3 | 99,8 | 92.8 | 97,8 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| N-Shot | 1 | 5 |
| Veröffentlicht (Cosinus, FCE) | 44,2 | 57.0 |
| Dieses Repo (Cosinus, FCE) | 42,8 | 53.6 |
| Dieses Repo (L2) | 46.0 | 58,4 |

Ich habe Max -Pooling anstelle von Schrittwandnungen verwendet, um mit den anderen Papieren übereinzustimmen. Die Miniimagenet -Experimente mit MAML 2. Order haben mich über einen Tag gebracht, um zu laufen.
Führen Sie experiments/maml.py zur Reproduktion von Ergebnissen aus Modell-Agnostic Meta-Learning (Finn et al.).
Argumente
NB: Für MAML N, K und Q sind zwischen Zug und Test festgelegt. Möglicherweise müssen Sie die Meta-Batch-Größe an Ihre GPU einstellen. 2. Ordnung MAML verwendet viel mehr Speicher.
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| N-Shot | 1 | 5 | 1 | 5 |
| Veröffentlicht | 98.7 | 99,9 | 95.8 | 98,9 |
| Dieses Repo (1) | 95,5 | 99,5 | 92.2 | 97.7 |
| Dieses Repo (2) | 98.1 | 99,8 | 91.6 | 95.9 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| N-Shot | 1 | 5 |
| Veröffentlicht | 48.1 | 63.2 |
| Dieses Repo (1) | 46,4 | 63.3 |
| Dieses Repo (2) | 47,5 | 64.7 |
Die Anzahl in Klammern gibt MAML 1. oder 2. Ordnung an.