Meta-learning with differentiable closed-form solvers.
Paper (published at ICLR 2019)
- arXiv: https://arxiv.org/abs/1805.08136
- OpenReview: https://openreview.net/forum?id=HyxnZh0ct7
Please refer to it as:
@inproceedings{
bertinetto2018metalearning,
title={Meta-learning with differentiable closed-form solvers},
author={Luca Bertinetto and Joao F. Henriques and Philip Torr and Andrea Vedaldi},
booktitle={International Conference on Learning Representations},
year={2019},
url={https://openreview.net/forum?id=HyxnZh0ct7},
}
Data setup
- In
scripts/train/conf/fewshots.yaml
, specify the location of your custom$DATASET_PATH
(data.root_dir
). - Download Omniglot, CIFAR-FS and miniImageNet the above format. Original datasets from here and here.
- Download and extract one or more datasets in your custom
$DATASET_PATH
folder, the code assumes the following structure (example):
$DATASET_PATH
βββ miniimagenet
βΒ Β βββ data
βΒ Β βΒ Β βββ n01532829
| | |ββ ...
βΒ Β βΒ Β βββ n13133613
βΒ Β βββ splits
βΒ Β βΒ Β βββ ravi-larochelle
| | | βββ train.txt
| | | βββ val.txt
| | | βββ test.txt
βββ omniglot
| ...
βββ cifarfs
| ...
Repo setup (with Conda)
- Set up conda environment:
conda env create -f environment.yml
. source activate fsrr
- Install torchnet:
pip install git+https://github.com/pytorch/tnt.git@master
. - Install the repo package:
pip install -e .
source deactivate fsrr
Run
scripts/train/experiments.sh
contains all the experiments of the paper (train+eval) in blocks of three lines, e.g.
expm_folder=mini_r2d2
python run_train.py --log.exp_dir $expm_folder --data.dataset miniimagenet --data.way 16 --model.drop 0.1 --base_learner.init_adj_scale 1e-4
python ../eval/run_eval.py --data.test_episodes 10000 --data.test_way 5 --data.test_shot 1 --model.model_path ../train/results/$expm_folder/best_model.1shot.t7
python ../eval/run_eval.py --data.test_episodes 10000 --data.test_way 5 --data.test_shot 5 --model.model_path ../train/results/$expm_folder/best_model.5shot.t7
Note
Some of the files of this repository (e.g. data loading and training boilerplate routines) are the result of a modification of prototypical networks code and contain a statement in their header.