หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

เริ่มต้นกับ TensorBoard

ดูใน TensorFlow.org เรียกใช้ใน Google Colab ดูแหล่งที่มาบน GitHub

ในแมชชีนเลิร์นนิงหากต้องการปรับปรุงบางสิ่งคุณมักจะต้องสามารถวัดผลได้ 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 ()

เมื่อฝึกกับ Model.fit () ของ Keras การเพิ่มการเรียกกลับ tf.keras.callbacks.TensorBoard เรียกกลับของ 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

ภาพรวมคร่าวๆของแดชบอร์ดที่แสดง (แท็บในแถบนำทางด้านบน):

  • แดชบอร์ด Scalars แสดงให้เห็นว่าการสูญเสียและเมตริกเปลี่ยนแปลงไปอย่างไรในทุกยุคสมัย คุณสามารถใช้เพื่อติดตามความเร็วในการฝึกอัตราการเรียนรู้และค่าสเกลาร์อื่น ๆ
  • แดชบอร์ด กราฟ ช่วยให้คุณเห็นภาพโมเดลของคุณ ในกรณีนี้กราฟ Keras ของเลเยอร์จะแสดงขึ้นซึ่งสามารถช่วยให้คุณมั่นใจได้ว่าสร้างขึ้นอย่างถูกต้อง
  • การกระจายและ Histograms แดชบอร์ดที่แสดงการกระจายของ Tensor เมื่อเวลาผ่านไป สิ่งนี้มีประโยชน์ในการแสดงภาพน้ำหนักและอคติและตรวจสอบว่ามีการเปลี่ยนแปลงในทางที่คาดหวัง

ปลั๊กอิน 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)

รหัสการฝึกอบรมเป็นไปตามบทช่วยสอนการ เริ่มต้นอย่างรวดเร็วขั้นสูง แต่จะแสดงวิธีบันทึกเมตริกไปยัง 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 callback และผ่าน tf.summary สำหรับสถานการณ์ที่กำหนดเองเพิ่มเติม

TensorBoard.dev: โฮสต์และแบ่งปันผลการทดลอง ML ของคุณ

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