Trang này được dịch bởi Cloud Translation API.
Switch to English

Bắt đầu với TensorBoard

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub

Trong học máy, để cải thiện điều gì đó, bạn thường cần có khả năng đo lường nó. TensorBoard là một công cụ cung cấp các phép đo và hình ảnh hóa cần thiết trong quy trình công việc học máy. Nó cho phép theo dõi các chỉ số thử nghiệm như mất mát và độ chính xác, trực quan hóa biểu đồ mô hình, chiếu các phép nhúng vào không gian chiều thấp hơn và hơn thế nữa.

Phần khởi động nhanh này sẽ hướng dẫn cách nhanh chóng bắt đầu với TensorBoard. Các hướng dẫn còn lại trong trang web này cung cấp thêm chi tiết về các khả năng cụ thể, nhiều trong số đó không được bao gồm ở đây.

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

Sử dụng tập dữ liệu MNIST làm ví dụ, chuẩn hóa dữ liệu và viết một hàm tạo mô hình Keras đơn giản để phân loại hình ảnh thành 10 lớp.

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

Sử dụng TensorBoard với Keras Model.fit ()

Khi đào tạo với Keras's Model.fit () , việc thêm tf.keras.callbacks.TensorBoard gọi lại tf.keras.callbacks.TensorBoard đảm bảo rằng các bản ghi được tạo và lưu trữ. Ngoài ra, hãy bật tính toán biểu đồ mỗi kỷ nguyên với histogram_freq=1 (tính năng này bị tắt theo mặc định)

Đặt nhật ký vào thư mục con có dấu thời gian để cho phép dễ dàng lựa chọn các lần chạy đào tạo khác nhau.

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>

Khởi động TensorBoard thông qua dòng lệnh hoặc trong trải nghiệm máy tính xách tay. Hai giao diện nói chung là giống nhau. Trong sổ tay, hãy sử dụng phép thuật dòng %tensorboard . Trên dòng lệnh, chạy lệnh tương tự mà không có "%".

%tensorboard --logdir logs/fit

Tổng quan ngắn gọn về các trang tổng quan được hiển thị (các tab trong thanh điều hướng trên cùng):

  • Bảng điều khiển Scalars hiển thị mức độ mất mát và số liệu thay đổi như thế nào theo từng kỷ nguyên. Bạn cũng có thể sử dụng nó để theo dõi tốc độ đào tạo, tốc độ học tập và các giá trị vô hướng khác.
  • Bảng điều khiển Đồ thị giúp bạn hình dung mô hình của mình. Trong trường hợp này, biểu đồ Keras của các lớp được hiển thị có thể giúp bạn đảm bảo nó được xây dựng chính xác.
  • Bảng điều khiển Phân phốiBiểu đồ hiển thị sự phân bố của Tensor theo thời gian. Điều này có thể hữu ích để hình dung trọng số và thành kiến ​​và xác minh rằng chúng đang thay đổi theo cách mong đợi.

Các plugin TensorBoard bổ sung được tự động bật khi bạn ghi nhật ký các loại dữ liệu khác. Ví dụ, lệnh gọi lại Keras TensorBoard cho phép bạn ghi nhật ký hình ảnh và nhúng. Bạn có thể xem những plugin khác có sẵn trong TensorBoard bằng cách nhấp vào menu thả xuống "không hoạt động" ở phía trên bên phải.

Sử dụng TensorBoard với các phương pháp khác

Khi đào tạo với các phương thức như tf.GradientTape() , hãy sử dụng tf.summary để ghi lại thông tin cần thiết.

Sử dụng cùng một tập dữ liệu như trên, nhưng chuyển đổi nó thành tf.data.Dataset để tận dụng khả năng phân phối:

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)

Mã đào tạo tuân theo hướng dẫn bắt đầu nhanh nâng cao nhưng chỉ ra cách ghi nhật ký số liệu vào TensorBoard. Chọn mất mát và tối ưu hóa:

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

Tạo các chỉ số trạng thái có thể được sử dụng để tích lũy các giá trị trong quá trình đào tạo và ghi lại bất kỳ lúc nào:

# 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')

Xác định các chức năng đào tạo và kiểm tra:

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)

Thiết lập người viết tóm tắt để ghi tóm tắt vào đĩa trong một thư mục nhật ký khác:

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)

Bắt đầu đào tạo. Sử dụng tf.summary.scalar() để ghi lại số liệu (mất mát và độ chính xác) trong quá trình đào tạo / kiểm tra trong phạm vi của người viết tóm tắt để ghi tóm tắt vào đĩa. Bạn có quyền kiểm soát các chỉ số nào cần ghi lại và tần suất thực hiện. Các chức năng tf.summary khác cho phép ghi các loại dữ liệu khác.

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

Mở lại TensorBoard, lần này trỏ nó vào thư mục nhật ký mới. Chúng tôi cũng có thể bắt đầu TensorBoard để theo dõi quá trình đào tạo trong khi nó tiến triển.

%tensorboard --logdir logs/gradient_tape

Đó là nó! Bây giờ bạn đã thấy cách sử dụng TensorBoard thông qua callback Keras và thông qua tf.summary để biết thêm các kịch bản tùy chỉnh.

TensorBoard.dev: Lưu trữ và chia sẻ kết quả thử nghiệm ML của bạn

TensorBoard .

Để sử dụng TensorBoard.dev, hãy chạy lệnh sau:

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

Lưu ý rằng lời gọi này sử dụng tiền tố dấu chấm than ( ! ) Để gọi shell thay vì tiền tố phần trăm ( % ) để gọi phép thuật colab. Khi gọi lệnh này từ dòng lệnh, không cần tiền tố.

Xem một ví dụ ở đây .

Để biết thêm chi tiết về cách sử dụng TensorBoard.dev, hãy xem https://tensorboard.dev/#get-started