ดูบน 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()
เมื่อการฝึกอบรมกับ Keras ของ Model.fit () เพิ่ม tf.keras.callbacks.TensorBoard
เพื่อให้แน่ใจว่าการเรียกกลับบันทึกมีการสร้างและเก็บไว้ นอกจากนี้ช่วยให้ histogram คำนวณทุกยุคกับ 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
ที่จะใช้ประโยชน์จากความสามารถ batching:
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()
สร้างตัววัดแบบ stateful ที่สามารถใช้เพื่อสะสมค่าระหว่างการฝึกและบันทึกได้ทุกจุด:
# 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: โฮสต์และแชร์ผลการทดสอบ 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