Учебное пособие по TensorBoard: визуализация графов в TensorFlow.

⚡ Умное резюме

TensorBoard — это визуальный интерфейс для запуска обучения в TensorFlow, позволяющий строить кривые потерь, графики моделей, гистограммы весов и эмбеддинги. В этом пошаговом руководстве записываются файлы событий с помощью оценщика, а затем открывается панель мониторинга на порту 6006.

  • 🔘 Пять панелей мониторинга: Скалярные значения, графики, распределения, гистограммы и проектор — каждое из этих средств считывает данные разного типа.
  • ☑️ Каталог журнала: Аргумент model_dir определяет, куда TensorFlow записывает файлы events.out.tfevents.
  • Команда запуска: Выполните команду `tensorboard –logdir=PATH`, затем откройте `http://localhost:6006` в любом браузере.
  • 🧪 Скорость обучения: Неровная кривая потерь указывает на слишком высокую скорость, препятствующую сходимости модели.
  • 🇧🇷 TensorFlow 2: Функция обратного вызова Keras TensorBoard заменяет логирование оценщика, показанное в исходном примере.
  • ⚠️ Поиск и устранение неисправностей: Пустая панель мониторинга почти всегда означает, что путь к каталогу логов не соответствует пути к месту проведения обучения.

Учебное пособие по TensorBoard: визуализация графов в TensorFlow.

Что такое Тензорборд?

TensorBoard — это интерфейс, используемый для визуализации графа и других инструментов для понимания, отладки и оптимизации модели. Это инструмент, предоставляющий измерения и визуализацию для рабочего процесса машинного обучения. Он помогает track метрик, таких как потери и точность, визуализируют граф модели и проецируют векторные представления в пространства меньшей размерности.

TensorBoard поставляется с TensorFlow и работает как небольшой локальный веб-сервер, который считывает файлы событий, записываемые на диск в рамках обучающего задания.

Пример визуализации графа в TensorFlow с использованием TensorBoard

Изображение ниже взято из графа TensorBoard, который вы сгенерируете в этом уроке. Это главная панель:

Панель мониторинга TensorBoard Scalars, отображающая кривую средней потери обученного регрессора DNN.

На картинке ниже вы можете увидеть панель визуализации графа TensorBoard. Панель содержит различные вкладки, связанные с уровнем информации, которую вы добавляете при запуске модели.

Панель навигации TensorBoard с вкладками «Скаляры», «График», «Распределения», «Гистограммы» и «Проектор».

  • Скаляры: Отображение различной полезной информации в процессе обучения модели.
  • Графы: Показать модель
  • Гистограмма: Отображение весов с помощью гистограммы.
  • Распространение: Отобразить распределение веса
  • Проектор: Покажите анализ главных компонентов и алгоритм T-SNE. Метод, используемый для уменьшения размерности.

В этом уроке по TensorBoard вы обучите простую модель. глубокое обучение модель, и график, который она создает, считывается снизу вверх.

Если вы посмотрите на график, вы поймете, как работает модель. Пронумерованные значки на скриншоте ниже обозначают эти четыре этапа:

  1. Поместите данные в модель: добавьте в модель объем данных, равный размеру пакета, т. е. количеству потоков данных после каждой итерации.
  2. Передайте данные в тензоры
  3. Тренируй модель
  4. Отображение количества пакетов во время обучения. Сохраните модель на диск.

Граф TensorFlow в TensorBoard с пронумерованными узлами для очереди ввода, блока DNN и операции сохранения.

Основная идея TensorBoard заключается в том, что нейронная сеть может вести себя как черный ящик, и вам нужен инструмент для изучения того, что находится внутри этого ящика. Представьте TensorBoard как фонарик для погружения в сеть.

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

Чтобы вы могли оценить полезность графика TensorBoard, взгляните на две кривые функции потерь ниже:

На графике представлены две кривые функции потерь TensorBoard, сравнивающие модель, которая не обучается, с моделью, которая сходится.

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

Каждый алгоритм обучения повторяет вычисления много раз, пока линия функции потерь не станет более пологой. Минимизация функции потерь также требует скорости обучения, то есть скорости, с которой модель обучается. Если установить слишком высокую скорость обучения, у модели никогда не будет времени чему-либо научиться: это показано на левом графике, где линия колеблется вверх и вниз, потому что модель фактически угадывает. На графике справа показано, как функция потерь уменьшается с каждой итерацией, пока кривая не выровняется, что означает, что модель нашла решение.

TensorBoard — отличный инструмент для визуализации подобных метрик и выявления потенциальных проблем. Нейронной сети может потребоваться несколько часов или недель, прежде чем она найдет решение, а TensorBoard обновляет метрики, пока задача еще выполняется. Таким образом, вам не нужно ждать окончания, чтобы проверить, правильно ли обучается модель: откройте TensorBoard, проверьте, как идет обучение, и внесите необходимые изменения.

Как использовать TensorBoard?

В этом разделе вы узнаете, как открыть TensorBoard из терминала. macOS и начиная с командной строки WindowsВ данном случае основное внимание уделяется инструменту, а не модели, поэтому код обучения намеренно сделан коротким.

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

## Import the library
import tensorflow as tf
import numpy as np

Вы создаете данные. Это массив из 10000 строк и 5 столбцов.

X_train = (np.random.sample((10000,5)))
y_train =  (np.random.sample((10000,1)))
X_train.shape

Результат

(10000, 5)

Приведённый ниже код преобразует данные и создаёт модель.

Обратите внимание, что скорость обучения равна 0.1. Если вы измените эту скорость на более высокое значение, модель не найдет решения. Именно это произошло в левой части рисунка выше.

В примере используется TensorFlow estimator — высокоуровневый API, который инкапсулирует математические вычисления. Estimator относятся к API TensorFlow 1.x, поэтому два приведенных ниже фрагмента кода работают в среде установки 1.x или через... tf.compat.v1 пространство имен.

Для создания файлов журналов необходимо указать путь. Это делается с помощью аргумента. model_dir.

В приведенном ниже примере TensorBoard вы сохраняете модель внутри рабочего каталога, т. е. там, где вы храните блокнот или Python файл. Внутри этого пути TensorFlow создаст папку с именем train и дочернюю папку с именем linreg.

feature_columns = [
      tf.feature_column.numeric_column('x', shape=X_train.shape[1:])]
DNN_reg = tf.estimator.DNNRegressor(feature_columns=feature_columns,
# Indicate where to store the log file    
     model_dir='train/linreg',    
     hidden_units=[500, 300],    
     optimizer=tf.train.ProximalAdagradOptimizer(      
          learning_rate=0.1,      
          l1_regularization_strength=0.001    
      )
)

Результат

INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {&#x27;_model_dir': 'train/linreg', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1818e63828>, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Последний шаг в этом примере визуализации графа с помощью TensorFlow состоит в обучении модели. Во время обучения TensorFlow записывает информацию в каталог модели.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(    
     x={"x": X_train},    
     y=y_train, shuffle=False,num_epochs=None)
DNN_reg.train(train_input,steps=3000)

Результат

INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Saving checkpoints for 1 into train/linreg/model.ckpt.
INFO:tensorflow:loss = 40.060104, step = 1
INFO:tensorflow:global_step/sec: 197.061
INFO:tensorflow:loss = 10.62989, step = 101 (0.508 sec)
INFO:tensorflow:global_step/sec: 172.487
INFO:tensorflow:loss = 11.255318, step = 201 (0.584 sec)
INFO:tensorflow:global_step/sec: 193.295
INFO:tensorflow:loss = 10.604872, step = 301 (0.513 sec)
INFO:tensorflow:global_step/sec: 175.378
INFO:tensorflow:loss = 10.090343, step = 401 (0.572 sec)
INFO:tensorflow:global_step/sec: 209.737
INFO:tensorflow:loss = 10.057928, step = 501 (0.476 sec)
INFO:tensorflow:global_step/sec: 171.646
INFO:tensorflow:loss = 10.460144, step = 601 (0.583 sec)
INFO:tensorflow:global_step/sec: 192.269
INFO:tensorflow:loss = 10.529617, step = 701 (0.519 sec)
INFO:tensorflow:global_step/sec: 198.264
INFO:tensorflow:loss = 9.100082, step = 801 (0.504 sec)
INFO:tensorflow:global_step/sec: 226.842
INFO:tensorflow:loss = 10.485607, step = 901 (0.441 sec)
INFO:tensorflow:global_step/sec: 152.929
INFO:tensorflow:loss = 10.052481, step = 1001 (0.655 sec)
INFO:tensorflow:global_step/sec: 166.745
INFO:tensorflow:loss = 11.320213, step = 1101 (0.600 sec)
INFO:tensorflow:global_step/sec: 161.854
INFO:tensorflow:loss = 9.603306, step = 1201 (0.619 sec)
INFO:tensorflow:global_step/sec: 179.074
INFO:tensorflow:loss = 11.110269, step = 1301 (0.556 sec)
INFO:tensorflow:global_step/sec: 202.776
INFO:tensorflow:loss = 11.929443, step = 1401 (0.494 sec)
INFO:tensorflow:global_step/sec: 144.161
INFO:tensorflow:loss = 11.951693, step = 1501 (0.694 sec)
INFO:tensorflow:global_step/sec: 154.144
INFO:tensorflow:loss = 8.620987, step = 1601 (0.649 sec)
INFO:tensorflow:global_step/sec: 151.094
INFO:tensorflow:loss = 10.666125, step = 1701 (0.663 sec)
INFO:tensorflow:global_step/sec: 193.644
INFO:tensorflow:loss = 11.0349865, step = 1801 (0.516 sec)
INFO:tensorflow:global_step/sec: 189.707
INFO:tensorflow:loss = 9.860596, step = 1901 (0.526 sec)
INFO:tensorflow:global_step/sec: 176.423
INFO:tensorflow:loss = 10.695, step = 2001 (0.567 sec)
INFO:tensorflow:global_step/sec: 213.066
INFO:tensorflow:loss = 10.426752, step = 2101 (0.471 sec)
INFO:tensorflow:global_step/sec: 220.975
INFO:tensorflow:loss = 10.594796, step = 2201 (0.452 sec)
INFO:tensorflow:global_step/sec: 219.289
INFO:tensorflow:loss = 10.4212265, step = 2301 (0.456 sec)
INFO:tensorflow:global_step/sec: 215.123
INFO:tensorflow:loss = 9.668612, step = 2401 (0.465 sec)
INFO:tensorflow:global_step/sec: 175.65
INFO:tensorflow:loss = 10.009649, step = 2501 (0.569 sec)
INFO:tensorflow:global_step/sec: 206.962
INFO:tensorflow:loss = 10.477722, step = 2601 (0.483 sec)
INFO:tensorflow:global_step/sec: 229.627
INFO:tensorflow:loss = 9.877638, step = 2701 (0.435 sec)
INFO:tensorflow:global_step/sec: 195.792
INFO:tensorflow:loss = 10.274586, step = 2801 (0.512 sec)
INFO:tensorflow:global_step/sec: 176.803
INFO:tensorflow:loss = 10.061047, step = 2901 (0.566 sec)
INFO:tensorflow:Saving checkpoints for 3000 into train/linreg/model.ckpt.
INFO:tensorflow:Loss for final step: 10.73032.

<tensorflow.python.estimator.canned.dnn.DNNRegressor at 0x1818e63630>

В TensorFlow 2 ту же задачу выполняет функция обратного вызова Keras TensorBoard, которая записывает граф и метрики для каждой эпохи без какого-либо кода оценки:

logdir = "logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model.fit(train_images, train_labels, epochs=5,
          callbacks=[tensorboard_callback])

После завершения выполнения в каталоге логов хранится файл контрольной точки. graph.pbtxt файл и один или несколько events.out.tfevents файлы — именно то, что читает TensorBoard.

До macOS пользователей

На скриншоте ниже в Finder показана новая папка train/linreg, созданная внутри рабочего каталога.

macOS Список файлов, отображающий папки журналов train и linreg с файлами контрольных точек, событий и graph.pbtxt.

До Windows пользователей

On Windows Те же самые файлы отображаются по пути, который вы указали в параметре model_dir, как показано в адресной строке.

Windows Просмотр папки train linreg в проводнике браузера, содержащей файлы событий и контрольных точек TensorFlow.

Файл событий создается в том же формате, что и файл события. PyTorchТаким образом, панель мониторинга не ограничивается только запусками TensorFlow.

Теперь, когда события журнала записаны, вы можете открыть TensorBoard. По умолчанию TensorBoard работает на порту 6006.Jupyter (использует порт 8888). Используйте терминал на macOS или командную строку Anaconda Windows.

До macOS пользователей

# Different for you
cd /Users/Guru99/tuto_TF
source activate hello-tf!

Блокнот хранится по пути /Users/Guru99/tuto_TF

До Windows пользователей

cd C:\Users\Admin\Anaconda3
activate hello-tf

Записная книжка хранится по пути C:\Users\Admin\Anaconda3.

Для запуска TensorBoard выполните следующую команду из этой директории.

До macOS пользователей

tensorboard --logdir=./train/linreg

До Windows пользователей

tensorboard --logdir=.\train\linreg

После этого TensorBoard доступен по адресу http://localhost:6006

Флаг Что он контролирует
--logdir Каталог, содержащий файлы событий. Это единственный обязательный флаг.
--port Порт для обслуживания. По умолчанию — 6006; измените его, если предыдущий сеанс все еще использует этот порт.
--bind_all Запускать на каждом сетевом интерфейсе. TensorBoard по умолчанию привязывается только к localhost, поэтому для удаленного доступа необходим этот флаг, и его нельзя комбинировать с другими параметрами. --host.
--reload_interval Как часто, в секундах, выполняется повторное сканирование каталога журналов на наличие новых данных.
--logdir_spec В устаревшем режиме допускается использование нескольких путей, разделенных запятыми; --logdir Эта форма больше не поддерживается.

tensorboard dev Подкоманда больше не работает: размещенный сервис TensorBoard.dev был отключен 1 января 2024 года. Локальное использование не затронуто.

На некоторых компьютерах консоль выводит имя хоста вместо localhost, как в командной строке Anaconda ниже. Оба адреса открывают одну и ту же панель управления.

В командной строке Anaconda выполняется команда tensorboard, и выводится адрес сервера на порту 6006.

Скопируйте и вставьте этот адрес в свой любимый браузер. Вы должны увидеть панель управления Scalars, показанную ниже.

После корректной загрузки каталога с логами в браузере откроется панель мониторинга TensorBoard Scalars.

Если же вы видите что-то подобное:

На странице ошибки TensorBoard отображается сообщение "Файлы определения графа не найдены".

Это означает, что TensorBoard не может найти файл журнала. Убедитесь, что вы указали путь к файлу. cd направьте процесс обучения по правильному пути или дважды проверьте, действительно ли было создано событие в журнале. Если нет, повторно запустите код обучения.

Чтобы закрыть TensorBoard, нажмите CTRL+C в окне терминала.

Примечание: проверьте командную строку Anaconda, чтобы узнать текущий рабочий каталог.

В командной строке Anaconda отображается активная среда hello-tf и текущий рабочий каталог.

На скриншоте выше командная строка находится в папке C:\Users\Admin, поэтому файл журнала должен быть создан в этой папке.

Часто задаваемые вопросы (FAQ)

По завершении запуска остаются индекс контрольной точки, один или несколько файлов model.ckpt, файл graph.pbtxt и как минимум один файл events.out.tfevents. TensorBoard считывает только файлы событий; контрольные точки существуют для того, чтобы обучение могло возобновиться с того места, где оно остановилось.

Да. PyTorch корабли Краткое описаниеWriter Это означает, что данные передаются в том же формате файла событий, поэтому идентичная команда tensorboard –logdir отображает панель мониторинга. Сервер при этом не меняется — меняется только библиотека, которая формирует сводки.

Нет. Сервис, предоставляющий услуги хостинга, был закрыт 1 января 2024 года, и подкоманда tensorboard dev теперь возвращает ошибку. Результаты можно получить, запустив TensorBoard в блокноте, например, таком: Google Или же путем экспорта диаграмм в формат CSV или JSON.

Для каждого запуска создайте отдельную подпапку внутри общей родительской папки, затем укажите параметр –logdir на эту родительскую папку. Каждая подпапка отображается как отдельный запуск на левой панели, а кривые отображаются на одних и тех же осях, при этом для каждой подпапки установлен флажок.

Граф на уровне операций — это представление по умолчанию, показывающее, как TensorFlow понимает программу, построенное снизу вверх. Выбор тега keras переключает на концептуальный граф, который отображает только слои модели и упрощает проверку на соответствие вашей схеме.

Автоматизированные проверки позволяют получить десятки результатов одновременно, поэтому панель мониторинга становится инструментом сравнения, а не монитором отдельных запусков. Плагин HParams регистрирует каждую конфигурацию вместе с ее метриками, позволяя сортировать испытания вместо того, чтобы читать кривые по одной.

Второй пилот GitHub Быстро создайте черновой вариант функции обратного вызова и шаблона для генерации сводки. Воспринимайте вывод как черновик: он часто смешивает API TensorFlow 1.x и 2.x, поэтому перед запуском кода проверьте каждое имя по текущей документации.

Либо файл событий не был записан, либо путь, переданный параметру –logdir, не совпадает с путем, использованным в задании обучения. Убедитесь, что файл events.out.tfevents существует в этой папке, и на Windows Запустите TensorBoard с той же буквы диска.

Подведем итог этой публикации следующим образом: