Начать работу с TensorBoard

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

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

# Load the TensorBoard notebook extension
%load_ext tensorboard
import tensorflow as tf
import datetime
# Clear any logs from previous runs
rm -rf ./logs/

Использование MNIST набора данных в качестве примера, нормализовать данные и написать функцию , которая создает простую Keras модель для классификации изображений в 10 -х классов.

mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train
, x_test = x_train / 255.0, x_test / 255.0

def create_model():
 
return tf.keras.models.Sequential([
    tf
.keras.layers.Flatten(input_shape=(28, 28)),
    tf
.keras.layers.Dense(512, activation='relu'),
    tf
.keras.layers.Dropout(0.2),
    tf
.keras.layers.Dense(10, activation='softmax')
 
])
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step

Использование TensorBoard с Keras Model.fit ()

При обучении с Keras в Model.fit () , добавив tf.keras.callbacks.TensorBoard обратного вызова гарантирует , что журналы создаются и хранятся. Кроме того, позволяет гистограмма вычисление каждой эпоха с histogram_freq=1 (это по умолчанию отключено)

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

model = create_model()
model
.compile(optimizer='adam',
              loss
='sparse_categorical_crossentropy',
              metrics
=['accuracy'])

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

model
.fit(x=x_train,
          y
=y_train,
          epochs
=5,
          validation_data
=(x_test, y_test),
          callbacks
=[tensorboard_callback])
Train on 60000 samples, validate on 10000 samples
Epoch 1/5
60000/60000 [==============================] - 15s 246us/sample - loss: 0.2217 - accuracy: 0.9343 - val_loss: 0.1019 - val_accuracy: 0.9685
Epoch 2/5
60000/60000 [==============================] - 14s 229us/sample - loss: 0.0975 - accuracy: 0.9698 - val_loss: 0.0787 - val_accuracy: 0.9758
Epoch 3/5
60000/60000 [==============================] - 14s 231us/sample - loss: 0.0718 - accuracy: 0.9771 - val_loss: 0.0698 - val_accuracy: 0.9781
Epoch 4/5
60000/60000 [==============================] - 14s 227us/sample - loss: 0.0540 - accuracy: 0.9820 - val_loss: 0.0685 - val_accuracy: 0.9795
Epoch 5/5
60000/60000 [==============================] - 14s 228us/sample - loss: 0.0433 - accuracy: 0.9862 - val_loss: 0.0623 - val_accuracy: 0.9823
<tensorflow.python.keras.callbacks.History at 0x7fc8a5ee02e8>

Запустите TensorBoard из командной строки или в записной книжке. Два интерфейса в целом одинаковые. В ноутбуках, используйте %tensorboard магии линии. В командной строке выполните ту же команду без "%".

%tensorboard --logdir logs/fit

Краткий обзор показанных панелей мониторинга (вкладки на верхней панели навигации):

  • Приборная панель показывает скаляры как потери и показатели меняются с каждой эпохой. Вы можете использовать его также для отслеживания скорости обучения, скорости обучения и других скалярных значений.
  • Приборная панель Графы поможет вам визуализировать вашу модель. В этом случае отображается граф слоев Keras, который может помочь вам убедиться, что он построен правильно.
  • В Щитки Распределения и Гистограммы показывают распределение тензорной с течением времени. Это может быть полезно для визуализации весов и смещений и проверки того, что они изменяются ожидаемым образом.

Дополнительные плагины TensorBoard автоматически включаются, когда вы регистрируете другие типы данных. Например, обратный вызов Keras TensorBoard позволяет также регистрировать изображения и вложения. Вы можете увидеть, какие другие плагины доступны в TensorBoard, щелкнув «неактивный» раскрывающийся список в правом верхнем углу.

Использование TensorBoard с другими методами

При обучении с такими методами, как tf.GradientTape() , использование tf.summary для входа необходимой информации.

Используйте один и тот же набор данных , как описано выше, но преобразовать его в tf.data.Dataset воспользоваться дозированием возможностями:

train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
test_dataset
= tf.data.Dataset.from_tensor_slices((x_test, y_test))

train_dataset
= train_dataset.shuffle(60000).batch(64)
test_dataset
= test_dataset.batch(64)

Код обучения следует передовой QUICKSTART учебник, но показывает , как войти метрики для TensorBoard. Выберите убыток и оптимизатор:

loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer
= tf.keras.optimizers.Adam()

Создавайте показатели с отслеживанием состояния, которые можно использовать для накопления значений во время обучения и регистрировать в любой момент:

# Define our metrics
train_loss
= tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy
= tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss
= tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy
= tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')

Определите функции обучения и тестирования:

def train_step(model, optimizer, x_train, y_train):
 
with tf.GradientTape() as tape:
    predictions
= model(x_train, training=True)
    loss
= loss_object(y_train, predictions)
  grads
= tape.gradient(loss, model.trainable_variables)
  optimizer
.apply_gradients(zip(grads, model.trainable_variables))

  train_loss
(loss)
  train_accuracy
(y_train, predictions)

def test_step(model, x_test, y_test):
  predictions
= model(x_test)
  loss
= loss_object(y_test, predictions)

  test_loss
(loss)
  test_accuracy
(y_test, predictions)

Настройте составители сводок для записи сводок на диск в другом каталоге журналов:

current_time = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
train_log_dir
= 'logs/gradient_tape/' + current_time + '/train'
test_log_dir
= 'logs/gradient_tape/' + current_time + '/test'
train_summary_writer
= tf.summary.create_file_writer(train_log_dir)
test_summary_writer
= tf.summary.create_file_writer(test_log_dir)

Начать обучение. Используйте tf.summary.scalar() для регистрации показателей (потери и точности) в процессе обучения / тестирования в рамках кратких писателей писать аннотации к диску. У вас есть контроль над тем, какие показатели регистрировать и как часто это делать. Другие tf.summary функции дают возможность регистрации других типов данных.

model = create_model() # reset our model

EPOCHS
= 5

for epoch in range(EPOCHS):
 
for (x_train, y_train) in train_dataset:
    train_step
(model, optimizer, x_train, y_train)
 
with train_summary_writer.as_default():
    tf
.summary.scalar('loss', train_loss.result(), step=epoch)
    tf
.summary.scalar('accuracy', train_accuracy.result(), step=epoch)

 
for (x_test, y_test) in test_dataset:
    test_step
(model, x_test, y_test)
 
with test_summary_writer.as_default():
    tf
.summary.scalar('loss', test_loss.result(), step=epoch)
    tf
.summary.scalar('accuracy', test_accuracy.result(), step=epoch)

 
template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
 
print (template.format(epoch+1,
                         train_loss
.result(),
                         train_accuracy
.result()*100,
                         test_loss
.result(),
                         test_accuracy
.result()*100))

 
# Reset metrics every epoch
  train_loss
.reset_states()
  test_loss
.reset_states()
  train_accuracy
.reset_states()
  test_accuracy
.reset_states()
Epoch 1, Loss: 0.24321186542510986, Accuracy: 92.84333801269531, Test Loss: 0.13006582856178284, Test Accuracy: 95.9000015258789
Epoch 2, Loss: 0.10446818172931671, Accuracy: 96.84833526611328, Test Loss: 0.08867532759904861, Test Accuracy: 97.1199951171875
Epoch 3, Loss: 0.07096975296735764, Accuracy: 97.80166625976562, Test Loss: 0.07875105738639832, Test Accuracy: 97.48999786376953
Epoch 4, Loss: 0.05380449816584587, Accuracy: 98.34166717529297, Test Loss: 0.07712937891483307, Test Accuracy: 97.56999969482422
Epoch 5, Loss: 0.041443776339292526, Accuracy: 98.71833038330078, Test Loss: 0.07514958828687668, Test Accuracy: 97.5

Снова откройте TensorBoard, на этот раз указав его в новом каталоге журналов. Мы также могли бы запустить TensorBoard, чтобы отслеживать обучение по мере его выполнения.

%tensorboard --logdir logs/gradient_tape

Вот и все! Вы уже видели , как использовать TensorBoard как через обратный вызов Keras и через tf.summary для более пользовательских сценариев.

TensorBoard.dev: разместите и поделитесь результатами своего эксперимента машинного обучения

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

Чтобы использовать TensorBoard.dev, выполните следующую команду:

!tensorboard dev upload \
 
--logdir logs/fit \
 
--name "(optional) My latest experiment" \
 
--description "(optional) Simple comparison of several hyperparameters" \
 
--one_shot

Обратите внимание , что этот вызов использует восклицательный префикс ( ! ) , Чтобы вызвать оболочку , а не процент префикс ( % ) для вызова colab магии. При вызове этой команды из командной строки нет необходимости в префиксе.

Посмотреть пример здесь .

Для получения более подробной информации о том , как использовать TensorBoard.dev см https://tensorboard.dev/#get-started