TensorFlow : มาเล่นกับ MNIST Data ด้วยวิธีแบบ Basic กันเถอะ

Paripol Toopiroh
3 min readApr 30, 2018

--

Data set ยอดฮิตอีกตัวอีกตัว ใช้สำหรับเรียนรู้การทำ Machine Learning ที่เกี่ยวกับรูปภาพปูทางไปสู่ CNN ต่อไป

มารู้จัก MNIST Data Set กันก่อน ถ้าเราไม่รู้จักข้อมูลเราจะแก้ไขปัญหาไม่ได้แน่นอน ข้อมูล MNIST เป็นข้อมูลรูปภาพตัวเลข 0–9 ที่เขียนด้วยมือ เพื่อใช้ทำการฝึกทำนายว่ารูปตัวเลขดังกล่าวเป็นเลขอะไร

MNIST Data Set

ด้วยความที่เข้าใจได้ทั่วโลก TensorFlow เลือก Data Set ชุดนี้มาไว้ใน API เลย โดยมีจำนวนรูปสำหรับ Training 55,000 รูป รูปสำหรับ Test 10,000 รูป รูปสำหรับ Validation 5,000 รูป

รูปตัวเลขแต่ละรูปจะถูกนำมาแปลงเป็น 2D array ของ pixels ขนาด 28x28 และแทนด้วยตัวเลขตั้งแต่ 0–1 โดยสีขาวจะแทนด้วยเลข 0 และ สีดำแทนด้วยเลข 1 ส่วนในขั้นตอนการนำไปใช้ เราจะทำการ reshape array มาเป็น 28x28

Gray Scale Image

จาก 1 รูป 28x28 Data set ทำการ แปลงให้เป็น 784x1 หรือ 1*784 แล้วแต่สะดวก ที่มาของเลข 784 มาจาก 28x28 = 784 เพราะต้องการที่จะจัดเรียงชุดข้อมูลให้อยู่ในรูปแบบที่สามารถอ้างอิงทีละรูปได้สะดวก 55,000 รูป จะกลายเป็น Array ขนาด (784,55000) ดังนั้นพอนึกภาพการ array ที่จะเอาไปใช้เทรนจะได้ตามรูปข้างล่างนี้ ถ้าอยากหยิบรูปลำดับที่ 0 มาใช้ก็แค่อ้างอิง array[0]

Training Set

มาดูการจัดการ Array ของ Label ที่ใช้เก็บรูปตัวเลขนี้กันบ้าง สมมุติถ้าเป็นเลข 4 เราจะ label มันด้วย array : [0,0,0,0,1,0,0,0,0,0] จะเห็นว่าเลข 1 อยู่ในตำแหน่งที่ 5 เพราะเราเริ่มต้นที่เลข 0 ไล่ไปจนถึง 9 นั่นเอง ดังนั้นสุดท้ายแล้ว lable ของข้อมูล Test ชุดนี้จะแทนด้วย array ขนาด (10,55000) ถ้าจะให้เห็นภาพก็ตามด้านล่างนี้เลย

Label Set

Activation Function ด้วย Softmax Regression

Softmax Regression มีชื่อเรียกกันหลายชื่อ Multinomial Regression, Polytomous Linear Regression , Multiclass Linear Regression , Multinomial Logit , Maximum Entropy Classifier จะเยอะไปไหน
ที่มา : http://it.nation.ac.th/faculty/danai/download/statistics%20talks30.pdf

งานนี้เราจะใช้ Softmax มาเป็น Activate Function เพราะ Function นี้จะให้ค่าออกมาตั้งแต่ 0 ถึง 1

Softmax

Network ที่เรากำลังจะทำกันหน้าตาจะคล้ายๆด้านล่าง

Neural Network with Softmax Activation Function

จากรูป Network ได้ความว่า

จัดรูปแบบ Vectorize ซะใหม่ ให้ W และ x ในรูป vector การคูณ แล้วค่อยบวกด้วย vector b กลายร่างเป็น

ร่างสุดท้ายที่จะเอาไปใช้ใน TensorFlow

มาเริ่ม Code กันเลย ผมเลือก ใช้ colab ในการเขียนโปรแกรมนี้ครับ เพราะสะดวกที่สุดแล้วในเวลานี้

ดู code ตัวเต็มที่ : https://drive.google.com/file/d/1gRYotX_Y9RHFJN2u-TtOb7RKVTt7dTdW/view?usp=sharing

เริ่มต้นนะโม 3 จบ แล้ว import tensorflow ตามด้วย import mnist data set

import require lib and data

ตรวจสอบความพร้อมของทั้ง train set และ test set

MNIST Data

สุ่มหยิบตัวอย่างรูปมาดู

sample image

เปลี่ยน mode ให้เป็น gray scale โดยใส่ option cmap=’gist_gray’ เข้าไปซะ ตรวจสอบ min และ max เพื่อดูว่าข้อมูลถูก normalize มาแล้วหรอยัง

ข้อมูลพร้อม เอาไงต่อ….. จับเข้า Step ทำ neural network สิ
ทวนนะครับ Step การทำ Neural Network แบบ Basic มีนั้นตอนดังนี้

  1. PLACEHOLDERS
  2. VARIABLES
  3. CREATE GRAPH OPERATIONS
  4. LOSS FUNCTION
  5. OPTIMIZER
  6. CREATE SESSION
  7. EVALUATE MODEL

มาดู code กัน

Code Step

หลังจากนั้นก็ run เพื่อดูผลความถูกต้อง

Accuracy Result

สุดท้ายแล้วผลออกมากดีมากนะ 91.34% ยัง ยังดีไม่พอรอดู CNN ในตอนต่อไป

บรัยยยยย

พูดคุยกันได้ที่ https://www.facebook.com/paripol.toopiroh

--

--