รีวิว Deep Learning Library Episode 1 : Keras

ก่อนอื่นขอแนะนำตัวเองก่อนนะครับ ผมชื่อเสือนะครับ รีวิว Episode 1 นี่ถือว่าเป็นครั้งแรกเลยสำหรับการเขียนบล็อก

ช่วงนี้ต้องยอมรับเลยว่าเทรน Deep Learning นางกำลังมาแรงแหกโค้งจริงๆ และมีหลาย Library ให้เลือกใช้ ซึ่งวันนี้เสือขอเริ่มรีวิวที่ตัว Keras ก่อนนะครับ

Keras เป็น Deep Learning Library ในภาษา Python ซึ่งถูกออกแบบให้เป็นมิตรต่อผู้ใช้(พอผมรีวิว Episode 2 ขึ้นไปจะเริ่มแบบ เอิ่มแล้ว) ออกแบบโดยคุณ François Chollet ซึ่งผู้ที่สนใจสามารถเข้าไปดู Document ได้ที่ https://keras.io ได้เลยนะครับ

สำหรับการติดตั้งผู้ใช้สามารถติดได้โดยทำการเปิดหน้า Command Line ขึ้นมา(ถ้าฝั่ง Unix และ Linux จะเรียกว่า Terminal นะครับ ส่วน Windows เรียกว่า cmd) แล้วพิมพ์

$ pip install keras

หลังจากนั้นจะทำการโหลด Keras เข้ามา(ปอลอ ต่อเน็ตก่อนโหลดด้วยนะครับ) รวมถึงโหลด Library อื่นเข้ามา(ปอลอ สอง $ เป็นการบอกว่าโค๊ตของเราเป็นภาษา Bash นะครับ)

หลักการทำงานของ Keras ง่ายมากครับ คือการขึ้นไปขี่ TensorFlow และ Theano(นึกภาพง่ายๆนะครับ คนเขียนโปรแกรมพูดภาษาไทย TensorFlow และ Theano พูดภาษาฝรั่งเศส Keras ก็เหมือนล่ามแปลภาษานั่นแหละครับ) โดยผู้ใช้สามารถตั้งค่าได้ว่าจะให้ Keras ทำการรัน Library ไหนได้โดยทำการแก้ไขในไฟล์ keras.json ด้วย nano editor(ผมขอไม่ใช้ Vim นะครับเพราะออกจาก Vim ไม่เป็น 5555555555)

$ nano ~/.keras/keras.json
{
"backend": "tensorflow",
"epsilon": 1e-07,
"floatx": "float32",
"image_dim_ordering": "tf"
}

โดยผู้ใช้สามารถเปลี่ยนได้ที่ backend เป็น theano หรือ tensorflow

เริ่มเขียนโปรแกรมกันเถอะ :)

ใน Part แรกจะขอรีวิว Keras แบบเบื้องต้นก่อนนะครับ โดยเราจะใช้ Datasets Cifar10 โจทย์ของเราคือต้องการจำแนกว่าในรูปนั้นเป็นรูปอะไรจาก 10 ประเภท โดยเป็น Datasets จำนวน 60,000 รูป มีขนาด 32x32 RGB

ก่อนที่จะทำ Neural Network ผมแนะนำว่าควรที่จะ Normalization รูปก่อนนะครับ แล้วก็อย่าลืมแปลงตัว labels ของเราให้เป็น One Hot Vector ด้วยนะครับ

หลังจากนี้เราจะเริ่มทำการสร้างตัวแบบแล้วนะครับโดยใน Keras จะมีระบบการเขียนสองแบบ(จะขอกล่าวใน Episode 1.2 นะครับ)

จากในรูปนะครับจะพบว่า สมมติอยากทำอะไรใน Keras ง่ายๆเลยครับ แค่ add เข้าไป แค่นั้นจริงๆครับ แต่เราต้องบอกโปรแกรมก่อนนะครับว่าเป็น Sequential() ไม่งั้น Error กระจุย โดยใน Layer แรกสุดเราจะต้องทำการบอก Keras ด้วยนะครับว่า Input Size เท่าไร(ห้ามลืมนะครับ ไม่งั้นโปรแกรมจะเออเร่อทันที) ซึ่งในรูปเป็นขนาด 32x32x3 นะครับ หลังจากนั้นเราจะทำการสร้าง Convolution Layer, MaxPooling Layer, โดยเมื่อใดที่ต้องการนำตัวแบบเข้า Neural Network นั้นผู้ใช้จะต้องบอก Keras ว่า Flatten() ซึ่งเป็นการเรียง Input ให้อยู่ในรูปที่ Neural Network สามารถทำไปใช้ได้ โดยใน Neural Network นั้นผมได้สั่งทำการ Dropout ไว้ด้วยนะครับ(ถ้าท่านใดสนใจอ่านสามารถหาอ่านเปเปอร์ได้นะครับ) สุดท้ายเราต้องสร้าง Classifier โดยเราจะใช้ Softmax เป็นตัว Classify นะครับ ส่วนบรรทัดรองสุดท้ายเราจะบอกโมเดลว่าจะหาค่า Loss อย่างไร รวมถึง Algorithm ที่ใช้ในการหาค่าพารามิเตอร์ในโมเดลด้วยนะครับ

ข้อดีของ Keras อีกอย่างคือมีการบอกว่า Data เราเข้าโมเดลแล้วกี่ตัว มีเวลาบอกด้วยนะครับว่าอีกวินาทีโมเดลจะรันเสร็จโดยประมาณ(ปกติ Library อื่นไม่มีนะครับ) รวมถึง Real Time Accuracy ด้วยนะครับซึ่งเกิดจากการกำหนด Matrics

Review ตอนถัดไปนะครับ
Deep Learning Library Episode 1.2 : Keras(Sequential API) ท่านจะได้พับกบ เอ้ย พบกับ Sequential API ซึ่งก็คือที่เขียนทั้งหมดในตอนนี้(แล้วจะสร้างตอนใหม่ทำแมวน้ำอะไรละ- -) ตอนหน้าจะมารีวิวข้อดีและข้อเสียของ Sequential API กันนะครับ