Реализация Pytorch Алгоритма рептилий Openai для контролируемого обучения.
В настоящее время он работает на Omniglot, но еще не на Miniimagenet.
Код не был тщательно протестирован. Вклад и обратная связь более чем приветствуются!
В Torchvision уже есть класс наборов данных Omniglot, однако, похоже, он более адаптирован для контролируемого обучения, чем обучение с несколькими выстрелами.
omniglot.py предоставляет способ пробудить базовые задачи k-shot n-way от Omniglot, а также различные коммунальные услуги для разделения мета-тренировочных наборов, а также базовых задач.
Загрузите две части набора данных Omniglot:
Создайте omniglot/ папку в репо, распад и объедините два файла, чтобы иметь следующую структуру папки:
./train_omniglot.py
...
./omniglot/Alphabet_of_the_Magi/
./omniglot/Angelic/
./omniglot/Anglo-Saxon_Futhorc/
...
./omniglot/ULOG/
Теперь начните тренироваться с
python train_omniglot.py log --cuda 0 $HYPERPARAMETERS # with CPU
python train_omniglot.py log $HYPERPARAMETERS # with CUDA
где $ hyperparameters зависит от вашей задачи и гиперпараметров.
Поведение:
log/ , это создаст log/ папку для хранения информации о тензодателе и контрольно -пропускных пунктах.log/ , это возобновится с последней контрольной точки. Обучение может быть прервано в любое время с ^C и возобновлено с последней контрольной точки, повторно выполнив ту же команду.
Следующий набор гиперпараметров работает прилично. Они взяты из реализации OpenAI, но немного адаптированы для meta-batch=1 .


Для 5-й 5-выстрел (красная кривая):
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.001Для 5-й 1-выстрел (синяя кривая):
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