Implementação de Pytorch do algoritmo de répteis da OpenAI para aprendizado supervisionado.
Atualmente, ele é executado no Omniglot, mas ainda não no Miniimagenet.
O código não foi testado extensivamente. Contribuições e feedback são mais do que bem -vindos!
Já existe uma classe de conjunto de dados Omniglot na Torchvision, no entanto, parece estar mais adaptada para aprendizado supervisionado do que o aprendizado de poucos anos.
O omniglot.py fornece uma maneira de provar as tarefas de base n-way k-shot da Omniglot, e vários utilitários para dividir conjuntos de meta-treinamento e tarefas básicas.
Baixe as duas partes do conjunto de dados Omniglot:
Crie uma pasta omniglot/ no repositório, descompacte e mescla os dois arquivos para ter a seguinte estrutura de pastas:
./train_omniglot.py
...
./omniglot/Alphabet_of_the_Magi/
./omniglot/Angelic/
./omniglot/Anglo-Saxon_Futhorc/
...
./omniglot/ULOG/
Agora comece a treinar com
python train_omniglot.py log --cuda 0 $HYPERPARAMETERS # with CPU
python train_omniglot.py log $HYPERPARAMETERS # with CUDA
Onde $ hyperparameters depende de sua tarefa e hiperparâmetros.
Comportamento:
log/ , isso criará um log/ pasta para armazenar informações e pontos de verificação do tensorboard.log/ , isso será retomado do último ponto de verificação. O treinamento pode ser interrompido a qualquer momento com ^C e retomado do último ponto de verificação, executando o mesmo comando.
O seguinte conjunto de hiperparâmetros funciona decentemente. Eles são retirados da implementação do OpenAI, mas são adaptados ligeiramente para meta-batch=1 .


Para 5 vias 5-shot (curva vermelha):
python train_omniglot.py log/o55 --classes 5 --shots 5 --train-shots 10 --meta-iterations 100000 --iterations 5 --test-iterations 50 --batch 10 --meta-lr 0.2 --lr 0.001Para 1 tiro de 5 vias (curva azul):
python train_omniglot.py log/o51 --classes 5 --shots 1 --train-shots 12 --meta-iterations 200000 --iterations 12 --test-iterations 86 --batch 10 --meta-lr 0.33 --lr 0.00044