Время прочтения: 4 мин.

TensorWatch – это библиотека отладки и визуализации ML и DL моделей от Microsoft Research. Основная цель этого инструмента — уменьшение сложностей, связанных с метриками обучения, стоимостью получения информации о состоянии модели и т.д. Он работает в Jupyter Notebook для визуального отображения процесса обучения модели в реальном времени.

TensorWatch улучшает возможности отладки на этапах обучения и дообучения модели, включая несколько функций из библиотек с открытым исходным кодом, таких как визуализация модулируемых графов, исследование данных с помощью уменьшения размерности, статистика модели и несколько explainer’ов для сверточных нейронных сетей.

Установим пакет:

pip install tensorwatch

Выполним импорт необходимых библиотек:

%matplotlib notebook
import time, random
import tensorwatch as tw

Для понимания, необходимо рассказать про основные объекты в TensorWatch. Объект Watcher позволяет создавать потоки (далее простостримы). Затем мы можем записать в них любые значения. По умолчанию объект Watcher открывает сокеты TCP/IP, чтобы клиент мог запрашивать эти стримы. Поскольку значения записываются на одном конце, они сериализуются и отправляются любому клиенту (WatcherClient) на другом конце. Мы запустим WatcherClient на той же машине, что и объект Watcher. Он подключается к объекту Watcher, запрашивает эти стримы и передает их визуализатору (объекту Visualizer). Визуализатор прослушивает стрим и отображает значения по мере их поступления. Рассмотрим базовые возможности TensorWatch.

Для этого, запустим следующий скрипт из Python консоли:

# сохранять стримы будем в test.log 
w = tw.Watcher(filename='test.log')
# создаем стрим для записи значений
s = w.create_stream(name='some_metric')
# запишем целое число и его квадрат в кортеж
for i in range(1000):
    s.write((i, i*i))
    time.sleep(1)

Затем в Jupyter Notebook откроем стримы, которые мы создали ранее и построим график:

cli = tw.WatcherClient()
st_s = cli.open_stream('some_metric')

line_plot = tw.Visualizer(st_s, vis_type='line', xtitle='i', ytitle='s')
line_plot.show()

В случае обучения ML модели, в большинстве случаев, нужно будет создать несколько стримов и записывать в них необходимые метрики.

В репозитории Microsoft на примере вариационного автоэнкодера (VAE) демонстрируется как можно в интерактивном режиме запрашивать среднее значение функции потерь на батче данных от эпохи обучения, работающего в режиме реального времени, без необходимости предварительно регистрировать все данные.

TensorWatch поддерживает множество других типов диаграмм, включая гистограммы, круговые диаграммы, точечные диаграммы, столбчатые диаграммы и 3D-версии многих из этих графиков.

Пример с возможностью просмотреть набор данных в пространстве с более низкой размерностью, используя такие алгоритмы, как t-SNE:

Одной из сильных сторон Tensor Watch является возможность легко комбинировать, составлять и создавать пользовательские визуализации. Например, вы можете выбрать визуализацию произвольного количества стримов на одном и том же графике. Или же вы можете визуализировать один и тот же стрим на нескольких графиках одновременно. Вы даже можете создать свой собственный пользовательский виджет визуализации, просто создав новый класс Python и реализовав свои методы.

Уникальной особенностью TensorWatch является возможность запрашивать текущий запущенный процесс, извлекать результат этого запроса в виде стрима и направлять его на предпочитаемые визуализации. Вам не нужно заранее регистрировать какие-либо данные. Этот способ отладки и визуализации называют «ленивым» (Lazy Logging Mode).

Помимо интуитивно понятных функций, этот интерактивный инструмент является гибким и расширяемым, что позволяет визуализировать состояние системы в реальном времени. Сфера data science растет и развивается в геометрической прогрессии вместе со сложностью данных и моделей. Эта библиотека, несомненно, может помочь исследователям с отладкой ML и DL моделей.