PC-DARTS был принят для презентации на ICLR 2020!
PC-DARTS — это метод дифференцируемой архитектуры с эффективным использованием памяти, основанный на DARTS . В основном он направлен на снижение больших затрат памяти суперсети при одноразовом методе NAS, что означает, что его также можно комбинировать с другим одноразовым методом NAS, например ENAS . В отличие от предыдущих методов выборки, PC-DARTS производит выборку каналов построенной суперсети. Интересно, что хотя мы и ввели случайность в процессе поиска, производительность искомой архитектуры лучше и стабильнее, чем у DARTS! Подробное описание технических деталей и результатов экспериментов можно найти в нашей статье:
Частичные соединения каналов для эффективного поиска дифференцируемой архитектуры с использованием памяти
Юхуэй Сюй, Линси Се, Сяопэн Чжан, Синь Чен, Го-Цзюнь Ци, Ци Тянь и Хункай Сюн.
Этот код основан на реализации DARTS.
Реализация случайной выборки также выложена на ваше рассмотрение.
Основной файл для поиска в ImageNet загружен train_search_imagenet.py
.
Метод | Параметры(М) | Ошибка(%) | Стоимость поиска |
---|---|---|---|
АмебаНет-Б | 2,8 | 2,55 | 3150 |
ДАРТСВ1 | 3.3 | 3.00 | 0,4 |
ДАРТСВ2 | 3.3 | 2,76 | 1.0 |
СНАС | 2,8 | 2,85 | 1,5 |
ПК-ДАРТС | 3.6 | 2,57 | 0,1 |
На поиск по CIFAR-10 тратится всего 0,1 GPU-дня !
Метод | Флопы | Ошибка Топ-1 (%) | Топ-5 ошибок (%) | Стоимость поиска |
---|---|---|---|---|
НАСНет-А | 564 | 26,0 | 8.4 | 1800 г. |
АмебаНет-Б | 570 | 24,3 | 7,6 | 3150 |
ПНАС | 588 | 25,8 | 8.1 | 225 |
ДАРТСВ2 | 574 | 26,7 | 8,7 | 1.0 |
СНАС | 522 | 27,3 | 9.3 | 1,5 |
ПК-ДАРТС | 597 | 24.2 | 7.3 | 3,8 |
Найдите хорошую архитектуру в ImageNet, используя пространство поиска DARTS ( впервые! ).
Для запуска нашего кода вам понадобится только одна видеокарта Nvidia 1080ti (память 11 ГБ).
python train_search.py
Подготовка данных: 10% и 2,5% изображений должны быть предварительно выбраны случайным образом из каждого класса обучающего набора как train и val соответственно. Выборочные данные сохраняются в ./imagenet_search
. Обратите внимание: не следует использовать torch.utils.data.sampler.SubsetRandomSampler для выборки данных, поскольку imagenet слишком велик.
python train_search_imagenet.py --tmp_data_dir /path/to/your/sampled/data --save log_path
python train.py --auxiliary --cutout
python train_imagenet.py --tmp_data_dir /path/to/your/data --save log_path --auxiliary --note note_of_this_run
Вскоре!.
Для кодов в основной ветке рекомендуется использовать python2 with pytorch(3.0.1)
(работает на Nvidia 1080ti
). Мы также предоставили коды в V100_python1.0
если вы хотите реализовать PC-DARTS на Tesla V100
с помощью python3+
и pytorch1.0+
.
Вы даже можете запускать коды на графическом процессоре с памятью только 4G . PC-DARTS стоит меньше, чем память 4G, если мы используем те же настройки гиперпараметров, что и DARTS (размер пакета = 64).
Вы можете выполнить поиск в ImageNet по model_search_imagenet.py
! Файл обучения для поиска в ImageNet будет загружен после его очистки, или вы можете сгенерировать его в соответствии с файлом train_search в CIFAR10 и файлом evluate в ImageNet. Гиперпараметры описаны в нашей статье! Поиск занял 11,5 часов на 8 графических процессорах V100 (по 16 ГБ каждый). Если у вас V100 (32G), вы можете еще больше увеличить размер пакета.
Мы случайным образом выбираем 10% и 2,5% из каждого класса набора обучающих данных ImageNet. Ещё есть 1000 занятий! Замените input_search, target_search = next(iter(valid_queue))
следующими кодами, это будет намного быстрее:
try: input_search, target_search = next(valid_queue_iter) except: valid_queue_iter = iter(valid_queue) input_search, target_search = next(valid_queue_iter)
Основные коды PC-DARTS находятся в файле model_search.py
. Как описано в статье, мы используем эффективный способ реализации выборки каналов. Сначала выбирается фиксированный подмножество входных данных для подачи в операции-кандидаты, затем объединенные выходные данные заменяются местами. Предусмотрены две эффективные операции замены: перетасовка каналов и сдвиг каналов. Для нормализации края мы определяем параметры края (бета-версия в наших кодах) вместе с параметрами альфа в исходных кодах дартс.
Также предусмотрена реализация случайной выборки model_search_random.py
. Это также работает, хотя перетасовка каналов может иметь лучшую производительность.
PC-DARTS — это ультраэффективный метод NAS. У него есть потенциал для реализации других задач, таких как обнаружение и сегментация.
Поиск прогрессивной дифференцируемой архитектуры
Поиск дифференцируемой архитектуры
Если вы используете наш код в своих исследованиях, пожалуйста, цитируйте нашу статью соответствующим образом.
@inproceedings{ xu2020pcdarts, title={{{}PC{}}-{{}DARTS{}}: частичные соединения каналов для поиска архитектуры с эффективным использованием памяти}, автор = {Юхуэй Сюй и Линси Се и Сяопэн Чжан и Синь Чен и Го-Цзюнь Ци и Ци Тянь и Хункай Сюн}, booktitle={Международная конференция по обучению представлений}, год={2020}, url={https://openreview.net/forum?id=BJlS634tPr} }