このリポジトリの目的は、少数のショット学習研究を再現するために、清潔で読み取り可能なテスト済みコードを封じ込めることです。
このプロジェクトはPython 3.6とPytorchで書かれており、GPUがあると想定しています。
いくつかの情報については、これらの中程度の記事を参照してください
requirements.txtにリストされています。 pip install -r requirements.txtを備えてインストールしてください。
config.pyのDATA_PATH変数を編集して、OmniglotおよびMiniimagenetデータセットを保存する場所に編集します。
データを取得し、セットアップスクリプトを実行した後、フォルダー構造は次のように見えるはずです
DATA_PATH/
Omniglot/
images_background/
images_evaluation/
miniImageNet/
images_background/
images_evaluation/
Omniglotデータセット。 https://github.com/brendenlake/omniglot/tree/master/pythonからダウンロードして、抽出されたファイルをDATA_PATH/Omniglot_Rawに配置し、 scripts/prepare_omniglot.pyを実行します
Miniimagenetデータセット。 https://drive.google.com/file/d/0b3irx3uqnobmq1flnxjszudywee/view scripts/prepare_mini_imagenet.pyファイルdata/miniImageNet/imagesダウンロードします。
データセットを追加した後、すべてのテストを実行するためにルートディレクトリでpytestを実行します。
ファイルexperiments/experiments.txt以下の結果を取得するために使用したハイパーパラメーターが含まれています。

experiments/proto_nets.pyを実行するために、少数のショット学習のためにプロトタイカルネットワークの結果を再現します(Snell et al)。
議論
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| 公開 | 98.8 | 99.7 | 96.0 | 98.9 |
| このレポ | 98.2 | 99.4 | 95.8 | 98.6 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| n-shot | 1 | 5 |
| 公開 | 49.4 | 68.2 |
| このレポ | 48.0 | 66.2 |
微分可能な最近近隣の分類器。

experiments/matching_nets.pyを実行して、1ショット学習のネットワークを一致させる結果を再現します(Vinyals et al)。
議論
Combresはランダムの初期化に依存するのが遅く最終的なパフォーマンスであることがわかったため、コサイン距離メトリックを使用してこのペーパーの結果を再現するのに苦労しました。ただし、L2距離メトリックを使用して、このペーパーの結果を再現(そしてわずかに超える)ことができました。
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| 公開(コサイン) | 98.1 | 98.9 | 93.8 | 98.5 |
| このレポ(Cosine) | 92.0 | 93.2 | 75.6 | 77.8 |
| このレポ(L2) | 98.3 | 99.8 | 92.8 | 97.8 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| n-shot | 1 | 5 |
| 公開(Cosine、FCE) | 44.2 | 57.0 |
| このレポ(Cosine、FCE) | 42.8 | 53.6 |
| このレポ(L2) | 46.0 | 58.4 |

他の論文と一致するために、私は極大な畳み込みの代わりに最大プーリングを使用しました。 2番目のMAMLを使用したMiniImagenet実験は、走るのに1日をかけて私を連れて行ってくれました。
experiments/maml.pyを実行して、モデルに依存しないメタラーニングの結果を再現します(Finn et al)。
議論
NB:MAML Nの場合、KとQは列車とテストの間に固定されています。 GPUに合わせてメタバッチサイズを調整する必要がある場合があります。 2番目のMAMLは、より多くのメモリを使用します。
| Omniglot | ||||
|---|---|---|---|---|
| K-Way | 5 | 5 | 20 | 20 |
| n-shot | 1 | 5 | 1 | 5 |
| 公開 | 98.7 | 99.9 | 95.8 | 98.9 |
| このレポ(1) | 95.5 | 99.5 | 92.2 | 97.7 |
| このレポ(2) | 98.1 | 99.8 | 91.6 | 95.9 |
| Miniimagenet | ||
|---|---|---|
| K-Way | 5 | 5 |
| n-shot | 1 | 5 |
| 公開 | 48.1 | 63.2 |
| このレポ(1) | 46.4 | 63.3 |
| このレポ(2) | 47.5 | 64.7 |
括弧内の数値は、1番目または2番目のMAMLを示しています。