В этом блоге мы кратко рассмотрим руководство по обучению модели ResNet в TensorFlow. Хотя официальная документация TensorFlow действительно содержит основную информацию, которая вам нужна, она может не совсем иметь смысл сразу, и ее может быть немного сложно просеять.
Мы представляем здесь пошаговый процесс обучения, документируя лучшие практики, советы, хитрости и даже некоторые проблемы, с которыми мы столкнулись и в итоге преодолели при проведении процесса обучения.
Мы покрываем все, что вам нужно сделать, начиная с запуска TensorFlow, загрузки и подготовки ImageNet, вплоть до документирования и подготовки отчетов. Все эксперименты и тренировки проводились на Точное Валентное Рабочее место использование 2 графических процессоров NVIDIA RTX 2080 Ti.
Да, однако это руководство является хорошим упражнением для обучения большой нейронной сети с нуля с использованием большого набора данных (ImageNet). Хотя трансферное обучение - замечательная вещь, и вы можете загрузить предварительно обученные версии ResNet-50, вот несколько убедительных причин, по которым вы можете захотеть пройти это учебное упражнение:
В то время как трансферное обучение является мощным методом обмена знаниями, для инженеров по глубокому обучению все еще необходимо знать, как тренироваться с нуля. Итак, давайте начнем.
Прежде всего, вы захотите запустить свою среду TensorFlow. Нам нравится работать с Docker, поскольку он дает нам максимальную гибкость и воспроизводимую среду. Откройте окно терминала и начните!
ПРИМЕЧАНИЕ. Обязательно укажите свой тег -v, чтобы создать интерактивный том в контейнере.
nvidia-docker run -it -v /data:/datasets tensorflow/tensorflow:nightly-gpu bash
ИЛИесли вы планируете запускать Tensorboard в Docker-контейнере, обязательно укажите-p 6006: 6006и используйте следующую команду вместо этого.
nvidia-docker run -it -v /data:/datasets -p 6006:6006 tensorflow/tensorflow:nightly-gpu bash
Мы решили включить этот шаг, так как он, кажется, вызывает небольшую путаницу. ПРИМЕЧАНИЕ: вы захотите убедиться, что у вас есть более 300 ГБ дискового пространства (как мы выяснили), когда вы делаете этот шаг, так как шаг загрузки и предварительной обработки требует этого!
2.1) Для первого шага вам необходимо установить «git», если он не является частью вашей среды.
apt-get install git
2.2) Во-вторых, вы должны клонировать репозиторий TPU в своей среде (Нет, мы не используем TPU Google, но здесь содержатся важные сценарии предварительной обработки!)
git clone https://github.com/tensorflow/tpu.git
2.3) В-третьих, вам нужно установить зависимости GCS (даже если вы не используете GCS, вам все равно нужно это запустить!)
pip install gcloud google-cloud-storage
2.4) Наконец, вам нужно будет запуститьimagenet_to_gcs.pyскрипт, который загружает файлы с Image-Net.org и обрабатывает их в TFRecords, но не загружает их в GCS (отсюда«Nogcs_upload»флаг) полные варианты Вот, Также«Local_scratch_dir =»должен указать, где вы хотите сохранить набор данных.
python imagenet_to_gcs.py --local_scratch_dir=/data/imagenet --nogcs_upload
Примечание: ImageNet ОГРОМНЫЙ, в зависимости от вашего соединения, загрузка полного набора данных может занять несколько часов (возможно, в одночасье)!
Этот шаг очевиден, если у вас нет моделей, клонируйте репозиторий, используя:
git clone https://github.com/tensorflow/models.git
Экспортируйте PYTONPATH в папку, где находится папка моделей на вашем компьютере. Команда ниже, где модели были расположены на моей машине! Обязательно замените«/ наборы данных / модели»синтаксис с указанием пути к папке с вашими моделями!
export PYTHONPATH="$PYTHONPATH:/datasets/models"
Перейдите в папку моделей (если вы еще не там) и выполните следующую команду
pip install --user -r official/requirements.txt
илиесли вы используете Python3
pip3 install --user -r official/requirements.txt
ВАЖНОЕ ПРИМЕЧАНИЕ: Вы почти готовы тренироваться! По нашему опыту, для того, чтобы скрипт обучения работал правильно, вам необходимо скопировать (или переместить) данные из папки проверки и переместить их в папку поезда !!!
Запустите обучающий скрипт pythonimagenet_main.pyи установить параметры обучения. Ниже приведено то, что я использовал для обучения ResNet-50, 120 тренировочных эпох для этого упражнения сильно излишни, но мы просто хотели подтолкнуть наши графические процессоры В зависимости от вашей вычислительной мощности, тренировка по полному набору данных может занять несколько дней!
python imagenet_main.py --data_dir=/data/imagenet/train --num_gpus= 2 --batch_size=64 --resnet_size= 50 --model_dir=/data/imagenet/trained_model/Resnet50_bs64 --train_epochs=120
Примечание по параметрам обучения: обратите внимание, что вы можете указать много разных опций, включая:
Вышеупомянутые только некоторые из вариантов, доступных для обучения модели. Видеть resnet_run_loop.py для полного списка опций (вам придется копаться в коде).
Вы также можете увидеть свои результаты, используя TensorBoard:
tensorboard --logdir=/data/imagenet/trained_model/Resnet50_bs64
Если вы выполнили шаги, описанные выше, правильно (и использовали схожие параметры), вы должны получить аналогичные результаты ниже. Обратите внимание, что эти результаты соответствуют официальным результатам TensorFlow. Давайте посмотрим, что вы можете сделать!
точность
train_accuracy_1
accuracy_top_5
train_accuracy_top_5_1
потеря
l2_loss
cross_entropy_1
learning_rate_1
сек
Вот и все! Пожалуйста, дайте нам знать, если у вас есть какие-либо проблемы в обучении ResNet. Кроме того, какие советы и приемы вы используете при обучении моделей в TensorFlow? Дай мне знать!
Первоначально опубликовано на https://blog.exxactcorp.com 26 марта 2019 г.