Підручник з TensorBoard: Візуалізація графів TensorFlow

⚡ Розумний підсумок

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

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

Підручник з TensorBoard: Візуалізація графів TensorFlow

Що таке TensorBoard?

TensorBoard – це інтерфейс, який використовується для візуалізації графіка та інших інструментів для розуміння, налагодження та оптимізації моделі. Це інструмент, який надає вимірювання та візуалізації для робочого процесу машинного навчання. Він допомагає track метрик, таких як втрати та точність, візуалізувати граф моделі та проектувати вбудовування у простори нижчої вимірності.

TensorBoard постачається з TensorFlow і працює як невеликий локальний веб-сервер, який зчитує файли подій, які навчальне завдання записує на диск.

Візуалізація графа TensorFlow за допомогою прикладу TensorBoard

Зображення нижче взято з графіка TensorBoard, який ви згенеруєте в цьому посібнику. Це головна панель:

Панель інструментів TensorBoard Scalars, що показує криву average_loss навченого регресора 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, високорівневий API, який обгортає математичні обчислення. Оцінювачі належать до 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 з файлами checkpoint, events та graph.pbtxt

Для Windows користувачі

On Windows ті самі файли відображаються за шляхом, який ви передали до model_dir, як це виділено в адресному рядку.

Windows Перегляд у провіднику папки 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, тому файл журналу слід створювати в цій папці.

Поширені запитання

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

Так. PyTorch відправляє короткий викладWriter який генерує той самий формат файлу подій, тому ідентична команда tensorboard –logdir відтворює панель інструментів. Нічого на сервері не змінюється — лише бібліотека, яка створює зведення.

Ні. Розміщений сервіс закрився 1 січня 2024 року, і підкоманда tensorboard dev тепер повертає помилку. Поділіться результатами, запустивши TensorBoard усередині блокнота, наприклад, Google Colab або експортувавши діаграми у форматі CSV чи JSON.

Надайте кожному запуску окрему підпапку під спільним батьківським об'єктом, а потім вкажіть –logdir на батьківський об'єкт. Кожна підпапка відображається як окремий прогін на лівій панелі, а криві малюються на тих самих осях з прапорцем кожна.

Графік операційного рівня є поданням за замовчуванням і показує, як TensorFlow розуміє програму, намальовану знизу вгору. Вибір тегу keras перемикає на концептуальний граф, який показує лише шари моделі та його легше перевірити на відповідність вашому проєкту.

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

Копілот GitHub швидко створює чернетки зворотного виклику та шаблонний варіант summary-writer. Розглядайте вивід як чернетку: він часто змішує API TensorFlow 1.x та 2.x, тому перевірте кожну назву на відповідність поточній документації перед запуском коду.

Або файл подій не було записано, або шлях, переданий до –logdir, не збігається зі шляхом, який використовувалося навчальним завданням. Переконайтеся, що файл events.out.tfevents існує в цій папці, а потім… Windows запустіть TensorBoard з тієї ж літери диска.

Підсумуйте цей пост за допомогою: