เริ่มเรียนรู้ TensorFlow 2.0

TensorFlow คือ Open-source Machine learning library พัฒนาโดย Google เปิดให้ผู้ที่ต้องการนำไปใช้ค้นหา Insight factors จากข้อมูลแต่ละประเภท เช่น Text, Image เพื่อที่จะนำไปสู่การสร้าง Model เอาไปใช้งานจริงกับธุรกิจด้านต่างๆ

แต่เดิมนั้น Google พัฒนา TensorFlow 1.x ซึ่งก็ยังใช้กันอย่างแพร่หลายในปัจจุบัน แต่ล่าสุดได้ปล่อย TensorFlow 2.0 Alpha ออกมาให้ผู้ใช้งานได้นำไปทดสอบ ซึ่งบทความนี้จะสรุปเรื่องสำคัญที่ควรรู้ของทั้งสองเวอร์ชั่น

TensorFlow ใช้การแสดงความสัมพันธ์แบบกราฟ ซึ่งประกอบไปด้วยโหนด (Node) และ เส้นเชื่อม (Edges) แทนข้อมูลที่ถูกฟีดเข้าไปในกราฟ โดยที่โหนด (Node) มักถูกกำหนดให้เป็นเครื่องหมายคำนวณ (Ops : Operations), ตัวแปร (variables) หรือ ตัวรับฟีดข้อมูลเข้ากราฟ (Placeholders)

ในบทความนี้จะขอใช้คำย่อแทนทั้งสองเวอร์ชั่นว่า TensorFlow 1.x = TF1 และ TensorFlow 2.0 = TF2

สำหรับ TF1 จะมีสองส่วน พูดง่ายๆ คือ ส่วนที่กำหนด Logic หรือเงื่อนไขความสัมพันธ์ของกราฟก่อนคำนวณ(Graph Construction Phase) และส่วนประมวลผล (Execution Phase)

หากใครเขียน TF1 คงคุ้นชินกับ tf.Session และ sess.run แต่ใน TF2 ไม่จำเป็นต้องใช้ อีกต่อไปแล้ว ในการ Upgrade version นี้ทำให้เขียน Code สั้นลง และกระชับมากขึ้น มาลองฟังคุณ Paige Bailey (Google Developer Advocate) เล่าว่ามีอะไรใหม่ใน TF2.0 กันหน่อย

ทีนี้เรามาลองหาตัวอย่างทดสอบปรับ Code ให้เป็น TensorFlow 2.0 กัน โดยผมนำมาจากหัวข้อ Merging two different models in Keras ใน stackexchange.com ซึ่งจากหัวข้อนี้ โจทย์ให้ทำการ Merge Keras สองโมเดล คือนำ Model A และ Model B มา Merge กันให้เป็น Single Model โดยเชื่อมตรงจุดของ A2 และ B1 ตามภาพประกอบด้านล่าง

จากภาพนี้ขอ Note ไว้หน่อยว่า A2, A3 และจุดที่ใช้ Dense Layer เขาควรวาดภาพให้มีเส้นเชื่อมทั้งตอนเชื่อมขาเข้า และขาออกในทุก Units เพราะ Dense Layer เรียกอีกอย่างหนึ่งว่า Fully Connected Layerหรือเชื่อมทุกเส้นทั้งขาเข้า และขาออกนั่นเอง

ประมาณนี้

กลับมาที่โจทย์ จาก Topic นี้ มีผู้ที่ตอบได้น่าสนใจใช้ชื่อว่า Rkz และได้คะแนนดันโหวตสูงสุดเลยขออนุญาตนำ Code มาเป็นตัวอย่างทดสอบการแปลงเวอร์ชั่นในครั้งนี้ ซึ่งควร Plot Model ออกมาดูผลลัพธ์ ซึ่งจะต้องติดตั้ง pydot ใน Anaconda Environment ให้เรียบร้อยก่อน

conda install -c anaconda pydot

TensorFlow 1.x Code

TensorFlow 2.0 Code

จากตัวอย่างนี้กำหนดให้ Input Layer คือ A1 ที่มีจำนวน 30 input node เชื่อมต่อไปที่ Dense Layer A2 ซึ่งมีจำนวน 8 nodes พบว่าใช้ Activation หรือฟังก์ชันที่ใช้คำนวณของแต่ละโหนดเป็น Relu โดยฟังกชัน f(x) = max(0,x) หากได้ output ติดลบ จะมีค่าเป็น 0 และให้ค่าเป็น x เมื่อ x เป็นบวก

โดยที่ A2 เชื่อมต่อไปที่ B2 และ A3 และ B2 ก็เชื่อมต่อไปที่ B3 เป็นลำดับสุดท้าย แล้วทำการ Merge Model เข้าด้วยกันก็เป็นอันเรียบร้อย


หากเนื้อหามีส่วนไหนผิดพลาด รบกวนแจ้งได้ครับ กำลังฝึกเขียน
กอล์ฟ