该存储库的目的是包含清洁,可读和测试的代码,以复制几乎没有射击的学习研究。
该项目用Python 3.6和Pytorch编写,并假设您有GPU。
有关更多信息,请参阅这些中等文章
列表在requirements.txt中。使用pip install -r requirements.txt安装virtualenv中。
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数据集。 scripts/prepare_mini_imagenet.py https://drive.google.com/file/d/0b3irx3uqnobmq1flnxjszudywee/view下载data/miniImageNet/images
添加数据集后,在根目录中运行pytest以运行所有测试。
文件experiments/experiments.txt包含我用来获取以下结果的超参数。

运行experiments/proto_nets.py来重现原始网络的结果,以进行几次学习(Snell等)。
争论
| 全能 | ||||
|---|---|---|---|---|
| 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 |
| 迷你胶原 | ||
|---|---|---|
| k-way | 5 | 5 |
| N-shot | 1 | 5 |
| 出版 | 49.4 | 68.2 |
| 这个存储库 | 48.0 | 66.2 |
一个可区分的最近的邻居分类器。

运行experiments/matching_nets.py来复制一个镜头学习的匹配网络的结果(Vinyals等人)。
争论
我使用余弦距离度量重现本文的结果很难重现,因为我发现收敛速度缓慢,最终性能取决于随机初始化。但是,我能够使用L2距离度量来复制本文的结果(并略微超过)。
| 全能 | ||||
|---|---|---|---|---|
| k-way | 5 | 5 | 20 | 20 |
| N-shot | 1 | 5 | 1 | 5 |
| 出版(余弦) | 98.1 | 98.9 | 93.8 | 98.5 |
| 这个仓库(余弦) | 92.0 | 93.2 | 75.6 | 77.8 |
| 这个仓库(L2) | 98.3 | 99.8 | 92.8 | 97.8 |
| 迷你胶原 | ||
|---|---|---|
| k-way | 5 | 5 |
| N-shot | 1 | 5 |
| 出版(余弦,fce) | 44.2 | 57.0 |
| 这个仓库(余弦,fce) | 42.8 | 53.6 |
| 这个仓库(L2) | 46.0 | 58.4 |

我使用Max Pooling而不是基础的卷积,以便与其他论文保持一致。使用2阶MAML的迷你imagenet实验使我一整天都可以运行。
运行experiments/maml.py以复制模型敏锐的元学习的结果(Finn等人)。
争论
NB:对于MAML N,K和Q,在火车和测试之间固定。您可能需要调整元批量大小以适合您的GPU。第二阶MAML使用更多内存。
| 全能 | ||||
|---|---|---|---|---|
| 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 |
| 迷你胶原 | ||
|---|---|---|
| k-way | 5 | 5 |
| N-shot | 1 | 5 |
| 出版 | 48.1 | 63.2 |
| 这个仓库(1) | 46.4 | 63.3 |
| 这个仓库(2) | 47.5 | 64.7 |
括号中的数字表示一阶或第二阶MAML。