Простая альтернативная реализация прототипических сетей для нескольких обучения выстрела (бумага, код) в Pytorch.
Как показано в прототипических сети справочных документов, обучаются для встроенных образцов функций в векторе -пространстве, в частности, в каждом эпизоде (итерация), ряд образцов для подмножества классов выбирается и отправляется через модель, для каждой подмножества класса c ряд особенностей образцов ( n_support Образцы n_query и их класс BaryCentre могут быть сведены к минимуму.

После обучения вы можете вычислить T-SNE для функций, полученных моделью (не сделан в этом репо, больше информации о T-SNE здесь), это образец, как показано в статье.

Престижность @ludc за его вклад: Pytorch/Vision#46. Мы будем использовать официальный набор данных, когда он будет добавлен в Torchvision, если он не подразумевает большие изменения в коде.
Мы внедрили метод разделения Vynials, как в [соответствующих сетях для одного выстрела]. Это может быть тот же метод, который использовался в статье (на самом деле я загружаю разделенные файлы из «Offical» Repo). Затем мы применяем те же вращения, описанные. Таким образом, мы должны быть в состоянии сравнить результаты, полученные путем запуска этого кода с результатами, описанными в эталонном документе.
Как описано в его Pydoc, этот класс используется для генерации индексов каждой партии для прототипического алгоритма обучения.
В частности, объект создается созданием списка меток для набора данных, пробоотборник провозглашает, а затем общее количество классов и создает набор индексов для каждого класса NI набора данных. В каждом эпизоде пробоотборник выбирает случайные классы n_classes и возвращает число ( n_support + n_query ) индексов образцов для каждого из выбранных классов.
Вычислите потерю, как в цитируемой статье, в основном вдохновленной этим кодом одним из его авторов.
В prototypical_loss.py функция потерь и класс потерь à la pytorch реализованы.
Функция приобретает входной вход пакетов из модели, наземные истины образцов и число n_suppport от образцов, которые будут использоваться в качестве опорных образцов. Классы эпизодов получают вывод. Из целевого списка, образцы n_support получают случайным образом для каждого класса, их класс BarareCentres вычисляются, а также расстояния каждого оставшегося выборочного встраивания из каждого класса BaryCentre и вероятность каждого образца принадлежности к каждому классу эпизода получают финмально рассчитанные; Затем потери затем вычисляются из неверных вероятностей прогнозов (для образцов запроса), как обычно, в задачах классификации.
Обратите внимание, что код обучения здесь только для демонстрационных целей.
Чтобы обучить протонет, выполнять эту задачу, CD в корневую папку src этого репо и выполните:
$ python train.py
Сценарий принимает следующие параметры командной строки:
dataset_root : корневый каталог, в котором хранится набор данных, по умолчанию '../dataset'
nepochs : количество эпох для обучения, по умолчанию до 100
learning_rate : скорость обучения для модели по умолчанию до 0.001
lr_scheduler_step : шаг планировщика обучения Steplr, по умолчанию к 20
lr_scheduler_gamma : STEPLR SPACELER SCEDULER GAMMA, по умолчанию к 0.5
iterations : количество эпизодов за эпоху. по умолчанию до 100
classes_per_it_tr : количество случайных классов за эпизод для обучения. по умолчанию до 60
num_support_tr : количество образцов на класс для использования в качестве поддержки для обучения. по умолчанию до 5
num_query_tr : nnumber от образцов на класс для использования в качестве запроса для обучения. по умолчанию до 5
classes_per_it_val : количество случайных классов за эпизод для проверки. по умолчанию до 5
num_support_val : количество выборок на класс для использования в качестве поддержки для проверки. по умолчанию до 5
num_query_val : количество образцов на класс для использования в качестве запроса для проверки. по умолчанию до 15
manual_seed : вход для инициализации семян, по умолчанию, по умолчанию 7
cuda : позволяет CUDA (хранить True )
Запуск команды без аргументов будет обучать модели со значениями гиперпарамтерных по умолчанию (дает результаты, показанные выше).
Мы пытаемся воспроизводить выступления на справочной бумаге, мы обновим здесь наши лучшие результаты.
| Модель | 1-й выстрел (5-боковой акк.) | 5-выстрел (5-боковой акк.) | 1 -shot (20 -й Acc.) | 5-выстрел (20-часовой акк.) |
|---|---|---|---|---|
| Справочная бумага | 98,8% | 99,7% | 96,0% | 98,9% |
| Это репо | 98,5%** | 99,6%* | 95,1%° | 98,6%° |
* достигнуто с использованием параметров по умолчанию (с помощью опции --cuda )
** Достигнутый бег python train.py --cuda -nsTr 1 -nsVa 1
° Достигнуто бег python train.py --cuda -nsTr 1 -nsVa 1 -cVa 20
° достиг бега python train.py --cuda -nsTr 5 -nsVa 5 -cVa 20
цитируйте бумагу следующим образом (скопировал ее от Arxiv для вас):
@article{DBLP:journals/corr/SnellSZ17,
author = {Jake Snell and
Kevin Swersky and
Richard S. Zemel},
title = {Prototypical Networks for Few-shot Learning},
journal = {CoRR},
volume = {abs/1703.05175},
year = {2017},
url = {http://arxiv.org/abs/1703.05175},
archivePrefix = {arXiv},
eprint = {1703.05175},
timestamp = {Wed, 07 Jun 2017 14:41:38 +0200},
biburl = {http://dblp.org/rec/bib/journals/corr/SnellSZ17},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
Этот проект лицензирован по лицензии MIT
Copyright (C) 2018 Daniele E. Ciriello, Orobix Srl (www.orobix.com).