Package: torchmeta
TorchmetaA collection of extensions and data-loaders for few-shot learning & meta-learning inPyTorch. Torchmeta contains popular meta-learning benchmarks, fully compatible with bothtorchvisionand PyTorch'sDataLoader.FeaturesA unified interface for both few-shot classification and regression problems, to allow easy benchmarking on multiple problems and reproducibility.Helper functions for some popular problems, with default arguments from the literature.An thin extension of PyTorch'sModule, calledMetaModule, that simplifies the creation of certain meta-learning models (e.g. gradient based meta-learning methods). See theMAML examplefor an example usingMetaModule.Datasets availableFew-shot regression(toy problems):Sine waves (Finn et al., 2017)Harmonic functions (Lacoste et al., 2018)Sinusoid & lines (Finn et al., 2018)Few-shot classification(image classification):Omniglot (Lake et al., 2015, 2019)Mini-ImageNet (Vinyals et al., 2016,Ravi et al., 2017)Tiered-ImageNet (Ren et al., 2018)CIFAR-FS (Bertinetto et al., 2018)Fewshot-CIFAR100 (Oreshkin et al., 2018)Caltech-UCSD Birds (Hilliard et al., 2019,Wah et al., 2019)Double MNIST (Sun, 2019)Triple MNIST (Sun, 2019)Few-shot segmentation(semantic segmentation):Pascal5i 1-way SetupFew-shot classification (tabular datasets)Letter (Frey & Slate, 1991)One Hundred Plants (Margin) (Mallah et al. 2013)One Hundred Plants (Shape) (Mallah et al. 2013)One Hundred Plants (Texture) (Mallah et al. 2013)Bach Choral Harmony (Radicioni & Esposito, 2010)InstallationYou can install Torchmeta either using Python's package manager pip, or from source. To avoid any conflict with your existing Python setup, it is suggested to work in a virtual environment withvirtualenv. To installvirtualenv:pipinstall--upgradevirtualenv
virtualenvvenvsourcevenv/bin/activateRequirementsPython 3.6 or abovePyTorch 1.4 or aboveTorchvision 0.5 or aboveUsing pipThis is the recommended way to install Torchmeta:pipinstalltorchmetaFrom sourceYou can also install Torchmeta from source. This is recommended if you want to contribute to Torchmeta.gitclonehttps://github.com/tristandeleu/pytorch-meta.gitcdpytorch-meta
pythonsetup.pyinstallExampleMinimal exampleThis minimal example below shows how to create a dataloader for the 5-shot 5-way Omniglot dataset with Torchmeta. The dataloader loads a batch of randomly generated tasks, and all the samples are concatenated into a single tensor. For more examples, check theexamplesfolder.fromtorchmeta.datasets.helpersimportomniglotfromtorchmeta.utils.dataimportBatchMetaDataLoaderdataset=omniglot("data",ways=5,shots=5,test_shots=15,meta_train=True,download=True)dataloader=BatchMetaDataLoader(dataset,batch_size=16,num_workers=4)forbatchindataloader:train_inputs,train_targets=batch["train"]print('Train inputs shape:{0}'.format(train_inputs.shape))# (16, 25, 1, 28, 28)print('Train targets shape:{0}'.format(train_targets.shape))# (16, 25)test_inputs,test_targets=batch["test"]print('Test inputs shape:{0}'.format(test_inputs.shape))# (16, 75, 1, 28, 28)print('Test targets shape:{0}'.format(test_targets.shape))# (16, 75)Advanced exampleHelper functions are only available for some of the datasets available. However, all of them are available through the unified interface provided by Torchmeta. The variabledatasetdefined above is equivalent to the followingfromtorchmeta.datasetsimportOmniglotfromtorchmeta.transformsimportCategorical,ClassSplitter,Rotationfromtorchvision.transformsimportCompose,Resize,ToTensorfromtorchmeta.utils.dataimportBatchMetaDataLoaderdataset=Omniglot("data",# Number of waysnum_classes_per_task=5,# Resize the images to 28x28 and converts them to PyTorch tensors (from Torchvision)transform=Compose([Resize(28),ToTensor()]),# Transform the labels to integers (e.g. ("Glagolitic/character01", "Sanskrit/character14", ...) to (0, 1, ...))target_transform=Categorical(num_classes=5),# Creates new virtual classes with rotated versions of the images (from Santoro et al., 2016)class_augmentations=[Rotation([90,180,270])],meta_train=True,download=True)dataset=ClassSplitter(dataset,shuffle=True,num_train_per_class=5,num_test_per_class=15)dataloader=BatchMetaDataLoader(dataset,batch_size=16,num_workers=4)Note that the dataloader, receiving the dataset, remains the same.CitationTristan Deleu, Tobias Würfl, Mandana Samiei, Joseph Paul Cohen, and Yoshua Bengio. Torchmeta: A Meta-Learning library for PyTorch, 2019 [ArXiv]If you want to cite Torchmeta, use the following Bibtex entry:@misc{deleu2019torchmeta,
  title={{Torchmeta: A Meta-Learning library for PyTorch}},
  author={Deleu, Tristan and W\"urfl, Tobias and Samiei, Mandana and Cohen, Joseph Paul and Bengio, Yoshua},
  year={2019},
  url={https://arxiv.org/abs/1909.06576},
  note={Available at: https://github.com/tristandeleu/pytorch-meta}
}