Categories: Knowledge

Visualization ภายในโมเดล Deep Neural Network แสดงผลการเทรน Deep Learning ด้วย Tensorboard ep.1

ตามปกติเราจะคิดว่า Deep Neural Network เป็นเหมือน Black Box หรือกล่องดำ ที่เราไม่สามารถจะเข้าใจการทำงานภายในได้ Tensorboard คือเครื่องมือที่จะช่วยให้เราส่องทะลุเข้าไปเห็นถึงการทำงานภายในของโมเดล ตั้งแต่การเทรน Deep Learning, Metrics, Gradient, Embedding, Optimization, Etc. ให้เราเห็นภาพ และเข้าใจมากขึ้น ช่วยให้การ Debug, Hyperparameter Tuning ทำได้ง่ายขึ้น

ตัวอย่าง Tensorboard

Metrics ของโมเดล เช่น Accuracy, Training Loss, Validation Loss
สถิติของโมเดล Gradient สูงสุด ต่ำสุด เฉลี่ย
Graph ภายในโมเดล Resnet18
ค่าของ Weight และ Bias ใน Model Resnet18
Histogram ของ Weight และ Bias ใน Model Resnet18

เรามาเริ่มกันเลย

ในเคสนี้เราจะเน้นการใช้ Tensorboard ดูการทำงานภายในโมเดล โดยใช้ Dataset MNIST ส่วนรายละเอียดการเทรนโมเดล Image Classifier ชุดข้อมูล MNIST ขอให้ดู ep ก่อน ๆ

0. Magic Commands

เพิ่ม magic command ของ tensorboard

In [1]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline

%load_ext tensorboard

ถ้ายังไม่มี tensorboard ให้ install ด้วย cell ด้านล่าง

In [2]:
# !conda install -y -c conda-forge tensorboard 

1. Import Library

เพิ่ม import tensorboard callbacks

In [3]:
from fastai import *
from fastai.vision import *
from fastai.metrics import accuracy
import time

from fastai.callbacks.tensorboard import *

2. ข้อมูล

ใช้ชุดข้อมูล Dataset MNIST ตัวเลขอารบิคเขียนด้วยลายมือ

In [4]:
path = untar_data(URLs.MNIST)

3. เตรียมข้อมูล

In [5]:
batchsize = 64
np.random.seed(0)
transform = get_transforms(do_flip=False)

databunch = ImageDataBunch.from_folder(path, train='training', 
                                       valid_pct=0.2, size=28, 
                                       ds_tfms=transform, bs=batchsize, 
                                       num_workers=8).normalize()

4. สร้างโมเดล

In [ ]:
learner = cnn_learner(databunch, models.resnet18, metrics=accuracy)

สร้าง Callback เพื่อส่งข้อมูลภายในโมเดล ไปให้ Tensorboard

In [7]:
proj_id = '07a-tensorboard-mnist'
tboard_path = Path('data/tensorboard/' + proj_id)
learner.callback_fns.append(partial(LearnerTensorboardWriter, 
                                    base_dir=tboard_path, 
                                    name=f'Learner{time.time()}'))
print(f"tensorboard --logdir={tboard_path}")
tensorboard --logdir=data/tensorboard/07a-tensorboard-mnist

สำหรับ clear logs และ kill process tensorboard

In [8]:
# ! rm -rf $tboard_path

เราสามารถดูเปิด Tensorboard ได้ 2 ทาง

  1. ใน Notebook ให้รัน cell magic command ด้านล่าง

  2. นอก Notebook เปิด Shell ใหม่ แล้วรันคำสั่ง tensorboard --logdir=./data/tensorboard/07a-tensorboard-mnist แล้วเปิดลิงค์ http://localhost:6006

เราอาจจะต้องรอให้เทรนผ่าน Epoch แรกไปก่อน ถึงจะเห็นกราฟ

In [ ]:
%tensorboard --logdir=$tboard_path

5. เริ่มต้นเทรนโมเดล

เทรนด้วยค่า Default ไป 4 Cycle

In [10]:
learner.fit_one_cycle(4)
epoch train_loss valid_loss accuracy time
0 0.709782 0.546868 0.819857 00:45
1 0.316091 0.228640 0.928000 00:41
2 0.225166 0.148242 0.952000 00:41
3 0.199581 0.143832 0.954214 00:59

6. เทรนต่อ

In [11]:
learner.fit_one_cycle(3, max_lr=slice(1e-6, 3e-3))
epoch train_loss valid_loss accuracy time
0 0.258392 0.154554 0.951214 00:51
1 0.210422 0.127924 0.958500 00:50
2 0.200400 0.128951 0.958571 00:51

สำเร็จแล้ว

เราสามารถใช้ Tensorboard ดูสถิติภายในโมเดล เพื่อใช้ในการ Debug และ Hyperparameter Tuning ไปถึงนำไป Present ได้อย่างสวยงาม

7. สรุป

  1. เราสามารถเรียกใช้ Tensorboard แสดงกราฟสวยงาม ได้ด้วยโค้ด callback ไม่กี่บรรทัด
  2. แต่การตีความกราฟที่เห็นการทำงานภายในโมเดล ต้องมีความเข้าใจ การออกแบบ โมเดล Layer แบบต่าง ๆ ที่เราจะอธิบายต่อไป
In [ ]:
 

แชร์ให้เพื่อน:

Data Science Manager at Bua Labs
The ultimate test of your knowledge is your capacity to convey it to another.
Keng Surapong

The ultimate test of your knowledge is your capacity to convey it to another.

Recent Posts

Python ตัดคำภาษาไทย ด้วย PyThaiNLP ตัดคำ Word Tokenize ภาษาไทย ตัวอย่างการตัดคำภาษาไทย อัลกอริทึม deepcut, newmm, longest – PyThaiNLP ep.2

ใน ep นี้เราจะมาเรียนรู้ หนึ่งในงาน NLP ภาษาไทย ที่เป็นที่ต้องการมากที่สุด เนื่องจากภาษาไทย เป็นภาษาที่เขียนติดกันหมด ไม่มีการเว้นคำด้วย Space เหมือนภาษาอังกฤษ ทำให้การตัดคำภาษาไทย หรือ Tokenization มีความซับซ้อน และ การตัดคำที่ถูกต้องมีความสำคัญ ต่อการนำข้อมูลคำศัพท์ ไปประมวลผลต่อ เช่น Feed… Read More

2020-01-29

สอนเขียน App Android ปัญญาประดิษฐ์ AI Computer Vision Mobile Application กล้องมือถือ ด้วย TensorFlow Lite รันโมเดล Machine Learning – tflite ep.8

ใน ep นี้ เราจะสอน สร้างแอพ Android เขียน App AI บนมือถือ ที่มีความสามารถ Image Classification ด้วย TensorFlow Lite โดยใช้ Transfer Learning โมเดล… Read More

2020-01-29

สอนสร้างแอพ Android เขียน App มือถือ AI ตรวจจับวัตถุ Object Detection กล้องมือถือ ด้วยภาษา Kotlin รัน TensorFlow Lite โมเดล Machine Learning – tflite ep.7

ใน ep นี้ เราจะสอน ขั้นตอนการสร้างแอพพลิเคชั่น AI ที่มีความสามารถ ตรวจจับวัตถุ Object Detection ด้วย TensorFlow Lite โดยใช้โมเดล MobileNet SSD ซึ่งถูก Pre-trained และ Convert… Read More

2020-01-25

สอนเขียน App มือถือ สร้างแอพ Android AI จำแนกรูปภาพ Image Classification กล้องมือถือ ด้วยภาษา Kotlin เรียกใช้ TensorFlow Lite โมเดล Machine Learning – tflite ep.6

ใน ep นี้ เราจะสอน ขั้นตอนการสร้างแอพพลิเคชั่น AI ที่มีความสามารถ Image Classification แบบ Multi-class Classification จำแนกรูปภาพ ด้วย TensorFlow Lite โดยใช้โมเดล MobileNet ซึ่งถูก Pre-trained,… Read More

2020-01-24

สอนเขียนโปรแกรม AI บนมือถือ Android ด้วยภาษา Kotlin เรียกใช้ TensorFlow Lite โมเดล Machine Learning จำแนกรูปภาพ หมา, แมว – tflite ep.5

ใน ep นี้เราจะเรียนรู้การสร้าง App ที่มีความสามารถ Image Classification แบบ Multi-class Classification จำแนกรูปภาพ ด้วย TensorFlow Lite โดยใช้โมเดลที่เราแปลงเตรียมไว้แล้วใน ep ก่อน ซึ่งเป็นโมเดล Convolutional Neural… Read More

2020-01-22

สอน TensorFlow Lite สร้าง Convolutional Neural Network (ConvNet, CNN) จำแนกรูปภาพแฟชั่น Fashion MNIST แปลง Convert ไปรันบนมือถือ, อุปกรณ์ Edge – tflite ep.4

ใน ep นี้เราจะสร้าง Convolutional Neural Network (ConvNet, CNN) ด้วยภาษา Python โดยใช้ TensorFlow สำหรับจำแนกรูปภาพแฟชั่น เสื้อผ้า กางเกง กระโปรง รองเท้า กระเป๋า แบบ Single… Read More

2020-01-21