การตรวจสอบกราฟเทนเซอร์โฟลว์

ดูบน TensorFlow.org ทำงานใน Google Colab ดูแหล่งที่มาบน GitHub ดาวน์โหลดโน๊ตบุ๊ค

ภาพรวม

TensorBoard ของแดชบอร์ดกราฟเป็นเครื่องมือที่มีประสิทธิภาพสำหรับการตรวจสอบรูปแบบ TensorFlow ของคุณ คุณสามารถดูกราฟแนวคิดของโครงสร้างโมเดลของคุณได้อย่างรวดเร็ว และมั่นใจได้ว่าตรงกับการออกแบบที่คุณต้องการ คุณยังสามารถดูกราฟระดับปฏิบัติการเพื่อทำความเข้าใจว่า TensorFlow เข้าใจโปรแกรมของคุณอย่างไร การตรวจสอบกราฟระดับปฏิบัติการสามารถให้ข้อมูลเชิงลึกเกี่ยวกับวิธีการเปลี่ยนแบบจำลองของคุณ ตัวอย่างเช่น คุณสามารถออกแบบแบบจำลองของคุณใหม่ได้หากการฝึกดำเนินไปช้ากว่าที่คาดไว้

บทช่วยสอนนี้นำเสนอภาพรวมโดยย่อเกี่ยวกับวิธีสร้างข้อมูลการวินิจฉัยกราฟและแสดงภาพข้อมูลในแดชบอร์ดกราฟของ TensorBoard คุณจะกำหนดและฝึกโมเดล Keras Sequential อย่างง่ายสำหรับชุดข้อมูล Fashion-MNIST และเรียนรู้วิธีบันทึกและตรวจสอบกราฟแบบจำลองของคุณ นอกจากนี้คุณยังจะใช้ API การติดตามการสร้างกราฟข้อมูลสำหรับการทำงานที่สร้างขึ้นโดยใช้ใหม่ tf.function คำอธิบายประกอบ

ติดตั้ง

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

import tensorflow as tf
from tensorflow import keras

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.0
import tensorboard
tensorboard.__version__
'2.2.1'
# Clear any logs from previous runs
rm -rf ./logs/

กำหนดแบบจำลอง Keras

ในตัวอย่างนี้ ตัวแยกประเภทเป็นแบบจำลองลำดับสี่ชั้นอย่างง่าย

# Define the model.
model = keras.models.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
])

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

ดาวน์โหลดและเตรียมข้อมูลการอบรม

(train_images, train_labels), _ = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0

ฝึกโมเดลและบันทึกข้อมูล

ก่อนการฝึกอบรมการกำหนด เรียกกลับ Keras TensorBoard ระบุไดเรกทอรีล็อก เมื่อส่งการเรียกกลับนี้ไปยัง Model.fit() คุณจะมั่นใจได้ว่าข้อมูลกราฟได้รับการบันทึกสำหรับการแสดงภาพใน TensorBoard

# Define the Keras TensorBoard callback.
logdir="logs/fit/" + datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir)

# Train the model.
model.fit(
    train_images,
    train_labels, 
    batch_size=64,
    epochs=5, 
    callbacks=[tensorboard_callback])
Epoch 1/5
938/938 [==============================] - 2s 2ms/step - loss: 0.6955 - accuracy: 0.7618
Epoch 2/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4877 - accuracy: 0.8296
Epoch 3/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4458 - accuracy: 0.8414
Epoch 4/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4246 - accuracy: 0.8476
Epoch 5/5
938/938 [==============================] - 2s 2ms/step - loss: 0.4117 - accuracy: 0.8508
<tensorflow.python.keras.callbacks.History at 0x7f656ecc3fd0>

กราฟระดับ Op

เริ่ม TensorBoard และรอสองสามวินาทีเพื่อให้ UI โหลด เลือกแดชบอร์ดกราฟโดยแตะ "กราฟ" ที่ด้านบน

%tensorboard --logdir logs

คุณยังสามารถเลือกใช้ TensorBoard.dev เพื่อสร้างการทดสอบที่โฮสต์และแชร์ได้

!tensorboard dev upload \
  --logdir logs \
  --name "Sample op-level graph" \
  --one_shot

โดยค่าเริ่มต้น TensorBoard แสดงกราฟสหกรณ์ระดับ (ทางด้านซ้าย คุณจะเห็นแท็ก "ค่าเริ่มต้น" ที่เลือกไว้) โปรดทราบว่ากราฟจะกลับด้าน ข้อมูลไหลจากล่างขึ้นบน ดังนั้นจึงกลับหัวเมื่อเปรียบเทียบกับโค้ด อย่างไรก็ตาม คุณจะเห็นว่ากราฟตรงกับคำจำกัดความของโมเดล Keras อย่างใกล้ชิด โดยมีขอบเพิ่มเติมสำหรับโหนดการคำนวณอื่นๆ

กราฟมักจะมีขนาดใหญ่มาก ดังนั้นคุณจึงสามารถจัดการการแสดงกราฟได้:

  • เลื่อนไปที่ซูมเข้าและออก
  • ลากไปในกระทะ
  • ดับเบิลคลิกสลับการขยายตัวโหนด (โหนดสามารถเป็นภาชนะสำหรับโหนดอื่น ๆ )

คุณยังสามารถดูข้อมูลเมตาได้โดยคลิกที่โหนด วิธีนี้ช่วยให้คุณเห็นอินพุต เอาต์พุต รูปร่าง และรายละเอียดอื่นๆ

กราฟแนวคิด

นอกเหนือไปจากกราฟการดำเนินการ TensorBoard ยังมีการแสดงกราฟความคิด นี่เป็นมุมมองของโมเดล Keras เท่านั้น ซึ่งอาจเป็นประโยชน์หากคุณกำลังใช้แบบจำลองที่บันทึกไว้ซ้ำ และคุณต้องการตรวจสอบหรือตรวจสอบโครงสร้างของแบบจำลอง

หากต้องการดูกราฟแนวคิด ให้เลือกแท็ก "keras" สำหรับตัวอย่างนี้คุณจะเห็นโหนดลำดับทรุดตัวลง คลิกสองครั้งที่โหนดเพื่อดูโครงสร้างของโมเดล:


กราฟของ tf.functions

ตัวอย่างจนถึงตอนนี้ได้อธิบายกราฟของโมเดล Keras ซึ่งกราฟได้ถูกสร้างขึ้นโดยการกำหนดเลเยอร์ Keras และเรียก Model.fit()

คุณอาจพบสถานการณ์ที่คุณจำเป็นต้องใช้ tf.function คำอธิบายประกอบเป็น "ลายเซ็น" คือเปลี่ยนฟังก์ชั่นการคำนวณหลามเป็น TensorFlow กราฟที่มีประสิทธิภาพสูง สำหรับสถานการณ์เหล่านี้คุณใช้ TensorFlow ข้อมูลอย่างย่อ Trace API เพื่อเข้าสู่ระบบการทำงานที่มีลายเซ็นสำหรับการแสดงใน TensorBoard

ในการใช้ Summary Trace API:

  • กำหนดและอธิบายฟังก์ชั่นที่มี tf.function
  • ใช้ tf.summary.trace_on() ทันทีก่อนที่เว็บไซต์ของคุณเรียกใช้ฟังก์ชัน
  • เพิ่มข้อมูลรายละเอียด (หน่วยความจำเวลา CPU) กราฟโดยผ่าน profiler=True
  • ด้วยการเป็นนักเขียนไฟล์ข้อมูลอย่างย่อโทร tf.summary.trace_export() ในการบันทึกข้อมูลเข้าสู่ระบบ

จากนั้น คุณสามารถใช้ TensorBoard เพื่อดูว่าฟังก์ชันของคุณทำงานอย่างไร

# The function to be traced.
@tf.function
def my_func(x, y):
  # A simple hand-rolled layer.
  return tf.nn.relu(tf.matmul(x, y))

# Set up logging.
stamp = datetime.now().strftime("%Y%m%d-%H%M%S")
logdir = 'logs/func/%s' % stamp
writer = tf.summary.create_file_writer(logdir)

# Sample data for your function.
x = tf.random.uniform((3, 3))
y = tf.random.uniform((3, 3))

# Bracket the function call with
# tf.summary.trace_on() and tf.summary.trace_export().
tf.summary.trace_on(graph=True, profiler=True)
# Call only one tf.function when tracing.
z = my_func(x, y)
with writer.as_default():
  tf.summary.trace_export(
      name="my_func_trace",
      step=0,
      profiler_outdir=logdir)
%tensorboard --logdir logs/func

ตอนนี้คุณสามารถดูโครงสร้างของฟังก์ชันของคุณตามที่ TensorBoard เข้าใจแล้ว คลิกที่ปุ่มตัวเลือก "โปรไฟล์" เพื่อดูสถิติ CPU และหน่วยความจำ