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

Hàm vô hướng TensorBoard: Ghi nhật ký số liệu đào tạo trong Keras

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

Tổng quat

Học máy luôn luôn bao gồm việc hiểu các số liệu chính như mất mát và cách chúng thay đổi khi quá trình đào tạo tiến triển. Các số liệu này có thể giúp bạn hiểu nếu bạn quá mức , ví dụ, hoặc nếu bạn không cần thiết phải đào tạo quá lâu. Bạn có thể muốn so sánh các số liệu này qua các lần đào tạo khác nhau để giúp gỡ lỗi và cải thiện mô hình của mình.

Bảng điều khiển vô hướng của TensorBoard cho phép bạn hình dung các số liệu này bằng cách sử dụng API đơn giản với rất ít nỗ lực. Hướng dẫn này trình bày các ví dụ rất cơ bản để giúp bạn tìm hiểu cách sử dụng các API này với TensorBoard khi phát triển mô hình Keras của bạn. Bạn sẽ tìm hiểu làm thế nào để sử dụng các hàm gọi lại Keras TensorBoard và API Tóm tắt TensorFlow để trực quan hóa các vô hướng mặc định và tùy chỉnh.

Thiết lập

 # Load the TensorBoard notebook extension.
%load_ext tensorboard
 
 from datetime import datetime
from packaging import version

import tensorflow as tf
from tensorflow import keras

import numpy as np

print("TensorFlow version: ", tf.__version__)
assert version.parse(tf.__version__).release[0] >= 2, \
    "This notebook requires TensorFlow 2.0 or above."
 
TensorFlow version:  2.2

Thiết lập dữ liệu cho hồi quy đơn giản

Bây giờ bạn sẽ sử dụng Keras để tính hồi quy, nghĩa là tìm dòng phù hợp nhất cho tập dữ liệu được ghép nối. (Mặc dù việc sử dụng các mạng thần kinh và giảm độ dốc là quá mức cần thiết cho loại vấn đề này , nhưng nó làm cho một ví dụ rất dễ hiểu.)

Bạn sẽ sử dụng TensorBoard để quan sát sự thay đổi mất tập luyện và kiểm tra giữa các kỷ nguyên. Hy vọng rằng, bạn sẽ thấy mất tập luyện và kiểm tra giảm dần theo thời gian và sau đó duy trì ổn định.

Đầu tiên, tạo 1000 điểm dữ liệu gần như dọc theo đường y = 0,5x + 2 . Chia các điểm dữ liệu này thành tập huấn luyện và kiểm tra. Hy vọng của bạn là mạng lưới thần kinh học được mối quan hệ này.

 data_size = 1000
# 80% of the data is for training.
train_pct = 0.8

train_size = int(data_size * train_pct)

# Create some input data between -1 and 1 and randomize it.
x = np.linspace(-1, 1, data_size)
np.random.shuffle(x)

# Generate the output data.
# y = 0.5x + 2 + noise
y = 0.5 * x + 2 + np.random.normal(0, 0.05, (data_size, ))

# Split into test and train pairs.
x_train, y_train = x[:train_size], y[:train_size]
x_test, y_test = x[train_size:], y[train_size:]
 

Đào tạo mô hình và ghi nhật ký mất

Bây giờ bạn đã sẵn sàng để xác định, đào tạo và đánh giá mô hình của bạn.

Để đăng nhập vô hướng mất khi bạn tập luyện, bạn sẽ làm như sau:

  1. Tạo cuộc gọi lại Keras TensorBoard
  2. Chỉ định một thư mục nhật ký
  3. Vượt qua cuộc gọi lại TensorBoard cho Model.fit () của Keras .

TensorBoard đọc dữ liệu nhật ký từ hệ thống phân cấp thư mục nhật ký. Trong sổ ghi chép này, thư mục nhật ký gốc là logs/scalars , được thêm vào bởi một thư mục con được đánh dấu thời gian. Thư mục con được đánh dấu thời gian cho phép bạn dễ dàng xác định và chọn các hoạt động đào tạo khi bạn sử dụng TensorBoard và lặp lại trên mô hình của mình.

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

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(lr=0.2),
)

print("Training ... With default parameters, this takes less than 10 seconds.")
training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback],
)

print("Average test loss: ", np.average(training_history.history['loss']))
 
Training ... With default parameters, this takes less than 10 seconds.
Average test loss:  0.05271831926424056

Kiểm tra tổn thất bằng cách sử dụng TensorBoard

Bây giờ, bắt đầu TensorBoard, chỉ định thư mục nhật ký gốc bạn đã sử dụng ở trên.

Đợi vài giây để UI của TensorBoard quay lên.

 %tensorboard --logdir logs/scalars
 

Bạn có thể thấy TensorBoard hiển thị thông báo "Không có bảng điều khiển nào đang hoạt động cho tập dữ liệu hiện tại". Đó là bởi vì dữ liệu đăng nhập ban đầu chưa được lưu. Khi quá trình đào tạo tiến triển, mô hình Keras sẽ bắt đầu đăng nhập dữ liệu. TensorBoard sẽ định kỳ làm mới và hiển thị cho bạn các số liệu vô hướng của bạn. Nếu bạn không kiên nhẫn, bạn có thể nhấn vào mũi tên Làm mới ở trên cùng bên phải.

Khi bạn theo dõi tiến trình đào tạo, lưu ý làm thế nào cả mất đào tạo và xác nhận giảm nhanh chóng, và sau đó vẫn ổn định. Trên thực tế, bạn có thể đã ngừng đào tạo sau 25 kỷ nguyên, bởi vì việc đào tạo đã không cải thiện nhiều sau thời điểm đó.

Di chuột qua biểu đồ để xem các điểm dữ liệu cụ thể. Bạn cũng có thể thử phóng to bằng chuột hoặc chọn một phần của chúng để xem chi tiết hơn.

Lưu ý bộ chọn "Chạy" ở bên trái. Một "chạy" đại diện cho một tập hợp các bản ghi từ một vòng đào tạo, trong trường hợp này là kết quả của Model.fit (). Các nhà phát triển thường có nhiều, rất nhiều lần chạy, khi họ thử nghiệm và phát triển mô hình của họ theo thời gian.

Sử dụng bộ chọn Chạy để chọn các lần chạy cụ thể hoặc chỉ chọn đào tạo hoặc xác nhận. So sánh các lần chạy sẽ giúp bạn đánh giá phiên bản mã nào đang giải quyết vấn đề của bạn tốt hơn.

Ok, biểu đồ tổn thất của TensorBoard chứng minh rằng tổn thất luôn giảm cho cả đào tạo và xác nhận và sau đó ổn định. Điều đó có nghĩa là các số liệu của mô hình có khả năng rất tốt! Bây giờ hãy xem cách người mẫu thực sự cư xử trong cuộc sống thực.

Cho dữ liệu đầu vào (60, 25, 2), dòng y = 0,5x + 2 sẽ mang lại (32, 14,5, 3). Người mẫu có đồng ý không?

 print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
 
[[32.234306 ]
 [14.5974245]
 [ 3.0074697]]

Không tệ!

Ghi nhật ký tùy chỉnh vô hướng

Điều gì nếu bạn muốn đăng nhập các giá trị tùy chỉnh, chẳng hạn như tỷ lệ học tập năng động ? Để làm điều đó, bạn cần sử dụng API Tóm tắt TensorFlow.

Đào tạo lại mô hình hồi quy và ghi lại tỷ lệ học tập tùy chỉnh. Đây là cách thực hiện:

  1. Tạo một trình ghi tệp, sử dụng tf.summary.create_file_writer() .
  2. Xác định một hàm tỷ lệ học tập tùy chỉnh. Điều này sẽ được chuyển đến cuộc gọi lại Keras LearningRateScheduler .
  3. Bên trong hàm tỷ lệ học tập, sử dụng tf.summary.scalar() để ghi lại tỷ lệ học tập tùy chỉnh.
  4. Truyền lại hàm gọi lại LearningRateScheduler cho Model.fit ().

Nói chung, để ghi nhật ký vô hướng tùy chỉnh, bạn cần sử dụng tf.summary.scalar() với trình ghi tệp. Trình ghi tệp chịu trách nhiệm ghi dữ liệu cho lần chạy này vào thư mục được chỉ định và được sử dụng hoàn toàn khi bạn sử dụng tf.summary.scalar() .

 logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()

def lr_schedule(epoch):
  """
  Returns a custom learning rate that decreases as epochs progress.
  """
  learning_rate = 0.2
  if epoch > 10:
    learning_rate = 0.02
  if epoch > 20:
    learning_rate = 0.01
  if epoch > 50:
    learning_rate = 0.005

  tf.summary.scalar('learning rate', data=learning_rate, step=epoch)
  return learning_rate

lr_callback = keras.callbacks.LearningRateScheduler(lr_schedule)
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

model = keras.models.Sequential([
    keras.layers.Dense(16, input_dim=1),
    keras.layers.Dense(1),
])

model.compile(
    loss='mse', # keras.losses.mean_squared_error
    optimizer=keras.optimizers.SGD(),
)

training_history = model.fit(
    x_train, # input
    y_train, # output
    batch_size=train_size,
    verbose=0, # Suppress chatty output; use Tensorboard instead
    epochs=100,
    validation_data=(x_test, y_test),
    callbacks=[tensorboard_callback, lr_callback],
)
 

Chúng ta hãy nhìn vào TensorBoard một lần nữa.

 %tensorboard --logdir logs/scalars
 

Sử dụng bộ chọn "Chạy" ở bên trái, lưu ý rằng bạn có <timestamp>/metrics chạy. Chọn lần chạy này sẽ hiển thị biểu đồ "tốc độ học tập" cho phép bạn xác minh sự tiến triển của tốc độ học tập trong lần chạy này.

Bạn cũng có thể so sánh các đường cong mất mát đào tạo và xác nhận của lần chạy này với các lần chạy trước đó của bạn.

Làm thế nào để mô hình này làm?

 print(model.predict([60, 25, 2]))
# True values to compare predictions against: 
# [[32.0]
#  [14.5]
#  [ 3.0]]
 
[[32.234013 ]
 [14.5973015]
 [ 3.0074618]]