Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)
Разработка и обучение глубоких нейронных сетей очень сложны и обычно включают в себя множество настроек, изменение структуры сети и пробу различных алгоритмов оптимизации и гиперпараметров. С теоретической точки зрения математическая основа архитектур глубоких нейронных сетей еще не завершена, и связанные с ними технологии обычно основаны на эмпирических результатах.
К счастью, присущая визуализации данных визуальная природа может компенсировать некоторые из этих недостатков и нарисовать картину более высокого уровня, которая может помочь исследователям в процессе обучения глубоких нейронных сетей. Например, во время обучения модели, если распределение данных градиента может быть построено в режиме реального времени, можно быстро обнаружить и скорректировать явления исчезновения или взрыва градиента.
Распределение обновления градиента с течением времени
Кроме того, визуализация векторов встраивания слов ясно показывает, что слова сходятся в разные многообразия в низкоразмерном пространстве, сохраняя контекстуальную близость. Другим примером является кластеризация данных: использование алгоритма T-SNE для отображения многомерных данных в низкоразмерное пространство. Визуализацию данных можно широко использовать во время глубокого обучения, чтобы лучше понять процесс обучения и сами данные.
Появление TensorBoard предоставляет пользователям TensorFlow мощные возможности визуализации. Мы получили отзывы от многих разных пользователей, включая корпоративных пользователей, о том, что многие люди используют TensorFlow из-за богатого набора функций, предоставляемых TensorBoard. Можно ли использовать этот мощный инструмент в других средах глубокого обучения? Благодаря усилиям TeamHG-Memex и их tensorboard_logger теперь мы можем использовать прозрачный интерфейс для записи пользовательских данных в файлы событий, которые затем считываются TensorBoard.
Он основан на нашей разработке MXboard, пакета Python для записи кадров данных MXNet и их отображения в TensorBoard. MXBoard можно установить, следуя этим простым инструкциям (https://github.com/awslabs/mxboard).
Примечание. Чтобы использовать все функции MXBoard, необходимо установить MXNet 1.2.0. Перед официальным выпуском MXNet 1.2.0 установите ночную версию MXNet: pip install --pre mxnet
MXBoard поддерживает большинство типов данных TensorBoard:
При разработке API MXBoard мы ссылались на API tensorboard-pytorch. Все API ведения журналов определены в классе SummaryWriter. Этот класс содержит такую информацию, как путь к файлу, частота записи, размер очереди и т. д. файла записи. Чтобы зарегистрировать новые данные определенного типа, такие как скаляр или изображение, просто вызовите соответствующий API для объекта SummaryWriter.
Например, предположим, что мы хотим построить распределение данных с нормальным распределением с уменьшающимся стандартным отклонением. Сначала определите объект SummaryWriter следующим образом:
Затем в каждом цикле создайте NDArray со значениями из нормального распределения. Затем мы передаем NDArray в функцию add_histogram(), указав количество бинов и индекс цикла i, который будет индексом точек данных. Наконец, как и с любым дескриптором файла, используемым в Python, вызовите .close(), чтобы закрыть дескриптор файла, используемый SummaryWriter.
Для того, чтобы визуализировать график, вам нужно войти в рабочий каталог на терминале и запустить TensorBoard, введя следующую команду:
Затем введите 127.0.0.1:8888 в адресную строку браузера. Нажмите на ГИСТОГРАММУ, и вы увидите следующую визуализацию:
Визуализируйте все более и более узкие нормальные распределения
Используя то, что мы узнали выше, мы пытаемся выполнить следующие две задачи:
Мониторинг контролируемого обучения
Понимать внутреннюю работу сверточных нейронных сетей
Мы будем использовать набор данных MNIST из API Gluon vision и использовать MXBoard для записи в реальном времени:
перекрестная потеря энтропии
Проверка и точность обучения
Распределение данных градиента
Все это можно использовать в качестве показателей для измерения прогресса обучения.
Во-первых, мы определяем объект SummaryWriter:
Мы указали flush_secs=5, потому что хотим, чтобы записи записывались в файл журнала каждые пять секунд, чтобы в браузере можно было отслеживать ход обучения в режиме реального времени.
Затем мы записываем кросс-энтропийную потерю в конце каждой партии:
В конце каждой партии мы записываем градиенты как тип данных HISTOGRAM, а обучаем и тестируем точность как тип SCALAR.
Затем мы одновременно запускаем сценарий обучения Python и TensorBoard, чтобы визуализировать ход обучения в реальном времени в браузере.
Чтобы воспроизвести этот эксперимент, полный код можно найти на Github.
Распространение обновлений градиента
Показатели обучения: потеря перекрестной энтропии, точность обучения, точность проверки.
Визуализация сверточных фильтров и карт объектов в виде изображений имеет смысл по двум причинам:
Когда обучение сходилось, сверточные фильтры показывали четкие функции обнаружения паттернов, линии и уникальные цвета. Сверточные фильтры, которые не сходятся или не соответствуют модели, будут показывать много шума.
Глядя на RGB-изображения фильтров и карт функций, мы можем понять изученные и значимые для сети функции, как правило, обнаружение границ и цвета.
Здесь мы используем три предварительно обученные модели CNN из MXNet Model Zoo, Inception-BN, Resnet-152 и VGG16. Фильтры первого сверточного слоя отображаются непосредственно в TensorBoard вместе с картами признаков, полученными при наложении изображения черного лебедя. Мы можем заметить, что сеть может иметь разные размеры ядра.
Inception-BN
Начало-БН: 7х7 ядер
RESNET-152
RESNET-152: 7x7 ядер
VGG16
VGG-16: 3x3 ядра
Как видно, фильтры трех моделей демонстрируют достаточно хорошую гладкость и регулярность, что является обычным признаком конвергентной модели. Цветовые фильтры в основном отвечают за выделение цветовых характеристик изображений. Изображения в градациях серого отвечают за выделение общего рисунка и особенностей контуров объектов на изображении. Встраивание визуального изображения
Последний пример не менее интересен. Встраивания являются ключевой концепцией в области машинного обучения, включая компьютерное зрение и обработку естественного языка (NLP). Это отображение представления данных высокой размерности в пространство низкой размерности. В традиционной классификации изображений выход предпоследнего слоя сверточной нейронной сети обычно подключается к полносвязному слою с активацией Softmax для предсказания класса или класса, к которому принадлежит изображение. Если вы удалите сеть для этого слоя классификации, у вас останется одна сеть, которая выводит вектор признаков для каждой выборки, обычно 512 или 1024 функции на выборку. Это называется встраиванием изображения. Мы можем вызвать API-интерфейс add_embedding() MXBoard, чтобы наблюдать за распределением вложений для наборов данных, спроецированных в 2D- или 3D-пространстве. Изображения с похожими визуальными характеристиками будут сгруппированы вместе.
Здесь мы случайным образом выбираем 2304 изображения из проверки и вычисляем их вложения с помощью Resnet-152, добавляем вложения в файл журнала MXBoard и визуализируем их:
Resnet-152 Внедрение 3D-проекции с использованием алгоритма PCA
По умолчанию мы используем алгоритм PCA для проецирования встраивания изображения 2304 в трехмерное пространство. Но эффект кластеризации не очевиден. Это связано с тем, что алгоритм PCA не может сохранить пространственные отношения между исходными точками данных. Поэтому мы используем алгоритм t-SNE, предоставляемый интерфейсом TensorBoard, для лучшей визуализации вложений. Построение оптимальной проекции — это динамический процесс:
Resnet-152 Внедрение 3D-проекции с использованием алгоритма T-SNE
После сходимости алгоритма t-SNE отчетливо видно, что набор данных разбит на несколько кластеров.
Наконец, мы можем использовать пользовательский интерфейс TensorBoard для проверки правильности классификации изображений. Мы вводим «dog» в правом верхнем углу графического интерфейса TensorBoard. Все изображения набора данных проверки, классифицированные как метка «собака», выделены. Мы также можем видеть, что кластеры, полученные из проекции T-SNE, находятся рядом с границами классификации.
Выделите изображение собаки
Весь соответствующий код и инструкции можно найти здесь (https://github.com/reminisce/mxboard-demo).
Как видно из этого руководства по MXBoard, визуализация — это мощный инструмент для наблюдения за обучением модели и понимания принципов глубокого обучения. MXBoard предоставляет MXNet простое, минимально навязчивое и простое в использовании решение для централизованной визуализации для научных исследований и производственных сред. Лучше всего, чтобы использовать его, все, что вам нужно, это браузер.
Оригинальная английская ссылка:
https://medium.com/apache-mxnet/mxboard-mxnet-data-visualization-2eed6ae31d2c