python #03 – Train/Validation/Test and Accuracy Assessment with Confusion Matrix

ต่อจาก python #02 – ติดตั้ง Tensorflow และ Keras ซึ่งกล่าวถึง ขั้นตอนการสร้าง Model และ วาง Layers ต่าง ๆ ของ Keras รวมไปถึง การใช้ model.summary() เพื่อแสดงโครงสร้าง Neural Network ที่สร้างขึ้นมาแล้ว ต่อไป เป็นการ นำข้อมูลมาแบ่งเป็นชุด สำหรับ Train/Validate/Evaluate การแบ่งข้อมูล สมมุติมีข้อมูล ที่อาจจะมาจาก CSV File ซึ่งมี field 0 – 9 คือ ตัวแปรต้น หรือ ที่มักเรียกว่า Features และ มี field 10 เป็น ตัวแปรตาม หรือ ที่เรียกว่า Label ทำการแบ่งข้อมูล เป็น X และ y(วิธีการ Slice ข้อมูล จะเป็นรูปแบบ data[ row, column]) ก่อนนำไปใช้ ต้องแปลง y ให้เป็น One-Hot Encode ซึ่ง Keras เองมีเครื่องมือให้อยู่แล้ว การแบ่งข้อมูลเป็น Train/Test สามารถทำได้หลายวิธี แต่วิธีหนึ่งที่ง่ายและสะดวก คือ ใช้ train_test_split จาก Scikit Learn ในตัวอย่างนี้ มีข้อมูลตัวอย่างน้อย คือ เพียง 5 samples จึงแบ่งสัดส่วน Test Size = 0.3 หรือ 30% การสร้าง Model สมมุติ เราออกแบบ Neural Network ตามภาพ กล่าวคือ มี Input Layer จำนวน 10 Nodes และ มี Hidden Layers เป็น Dense 2 ชั้น จำนวน 8 และ 5 Nodes ตามลำดับ โดยมี Activation Function เป็น Relu จากนั้น ส่งไปยัง Output Layer ที่มี 3 Nodes ใช้ Activation Function เป็น Softmax เพราะจะเป็น Categorial Classification และ ใช้ Code ตามนี้ แล้ว Compile โดยใช้ Loss Function เป็น Categorical Crossentropy, Optimizer เป็น Adam ที่ Learning Rate 0.001 (เลือกจะตั้งค่าหรือไม่ก็แล้วแต่กรณี) และกำหนด Metrics เป้น Accuracy การ Training ใช้คำสั่ง fit ในการ train โดยกำหนด X_train คือข้อมูลสำหรับการสอนโมเดล และ y_train เพื่อให้โมเดลเปรียบเทียบว่าต่างจากผลที่คำนวณแค่ไหน (ผ่าน Loss Function) จากนั้นจึงทำการ Adjust Weights กลับมา (ผ่าน Optimizer) ในกระบวนการ Backpropagationในตัวอย่างนี้ ตั้งค่า epochs หรือ จำนวนรอบที่จะ Train และ batch_size เพื่อกำหนดว่า

Read More »

การสร้าง RESTful API สำหรับใช้งานจริง ง่าย ๆ ด้วย Flask และ Waitress

จาก From LAB to Production – จาก Machine Learning Model สู่ Flask RESTful ซึ่งได้นำ Machine Learning แบบ Statistical Approach อย่าง Logistic Regression ที่สร้างโมเดล และ Train กับข้อมูลเรียบร้อยแล้ว (บนเครื่อง Development) จากนั้น ได้นำโมเดลออกมาใช้งาน โดยใช้ วิธีการ Serialization ด้วย joblib ในภาษา Python ได้เป็นไฟล์ออกมา แล้วจึงนำไปใช้เพื่อใช้ในการทำนาย (predict) ชนิดของดอก Iris บนเครื่อง Production โดยรับ Input จากผู้ใช้ผ่าน HTTP Protocol ทั้ง GET/POST ที่ TCP/5000 ตัวอย่างดังกล่าว ยังเป็นเพียงการ “ทดสอบ” แต่ในบทความนี้ จะเป็นวิธีการ ซึ่งนำไปสู่การใช้งานจริง ๆ ซึ่ง Flask แนะนำให้ใช้งานกับ “waitress” (น่าจะเลียนแบบจาก Server) ซึ่งเป็น WSGI (Web Server Gateway Interface) อีกตัวหนึ่ง ใช้งานง่าย เพราะไม่ต้องติดตั้ง Apache/Nginx เลย ติดตั้ง waitress predict.py from flask import Flask, request, jsonify from flask_restful import Resource, Api, reqparse from flask_cors import CORS app = Flask(__name__) # Enable CORS CORS(app) @app.route(“/predict”, methods=[“POST”]) def predict(): result = 0 if request.method == “POST”: input_value = request.form[“input_value”] # ประมวลผล # … # ตัวอย่างเช่น รับค่ามา แล้ว คูณ 2 result=input_value * 2 # ### return jsonify( prediction=result ),201 ไฟล์ predict.py เป็นตัวอย่าง python ซึ่งรับค่า input_value จาก HTML form ผ่าน POST method เข้ามา ที่ /predict ซึ่งเขียนด้วย Flask ที่จะไปเรียกใช้ฟังก์ชั่น prediction() แล้วก็ทำการคำนวณที่ต้องการ จากนั้น ตอบค่ากลับไปเป็น JSON ด้วยฟังก์ชั่น jsonify โดยสามารถกำหนด key ชื่อ prediction และ value เป็น result ที่คำนวณได้ และแจ้ง Response Code เป็น 201 waitress_server.py from waitress import serve import predict serve(predict.app, host=’0.0.0.0′, port=8080) ไฟล์ waitress_server.py ก็เพียงแค่ import serve จาก waitress ที่ติดตั้งไป และ import predict ซึ่งก็คือไฟล์ predict.py ข้างต้น (อยู่ในไดเรคทอรีเดียวกัน)

Read More »

วิธีตรวจสอบรุ่นของ CPU ว่าสามารถใช้งาน Tensorflow ได้หรือไม่

ปัญหา สร้างเครื่องบน VMWare ESXi รุ่นล่าสุดก็แล้ว ลงเป็น Windows Server 2016 DataCenter ก็แล้ว ตาม Spec ของ Tensorflow (Version ล่าสุด 1.12) บอกว่า ใช้ Python 3.6 ก็ลงแล้ว (ยังใช้กับตัวล่าสุด 3.7 ไม่ได้)  ติดตั้ง Tensorflow ก็ลงตามปรกติ ก็สำเร็จเรียบร้อยดี แต่พอลอง import ปรากฏว่าเกิด Error “Failed to load the native TensorFlow runtime.” ทั้ง ๆ ที่ลงบน Physical Server ที่ไม่ใช่ VMWare ก็ใช้งานได้ปรกติ ทำไม ??? ตั้งสมมุติฐาน Hardware มีความแตกต่างอะไร ระหว่าง VMWare กับ Physical Server ? รวบรวมข้อมูล ไปดู Hardware Requirements พบว่า ตั้งแต่ Tensorflow 1.6 เป็นต้นมา ต้องใช้งานบน CPU ที่มี AVX Instruction และจาก  https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX บอกว่า CPU ที่มี AVX Instruction คือ เก่าสุด ชื่อรุ่น Sandy Bridge แล้ว … เครื่อง Windows Server 2016 DataCenter ที่สร้างบน VMWare นั้น ได้ CPU อะไร ?? ค้นหาข้อมูล พบว่า Microsoft ให้ใช้เครื่องมือฟรี ที่ชื่อว่า coreinfo (ซึ่งบน Linux ใช้ cpuinfo) สามารถ Download ได้ที่ https://docs.microsoft.com/en-us/sysinternals/downloads/coreinfo เมื่อลอง Download มาติดตั้ง และ ใช้คำสั่ง coreinfo ได้ผลว่า เป็นรุ่น Intel Xeon รุ่น E7  – 4870 ลองไปค้นหาดู ว่า รุ่น E7 – 4870 มี Code Name ว่าอะไร  จาก Intel ได้ความว่า ชื่อรุ่น Westmere ซึ่ง ไม่มี AVX !!!!! ไปดูลำดับ Codename จาก  https://en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures พบว่า Westmere เป็นรุ่นสุดท้าย ก่อนจะมีการใส่ AVX นั่นเอง (Sandy Bridge, Ivy Bridge, Haswell … เป็นต้นมา มี AVX หมด) สรุปผล เครื่องบน VMWare ปัจจุบัน นั้นจะได้ Spec ตาม CPU ตัวต่ำสุดใน Cluster ดังนั้น …. เจ้าจึงได้ Westmere ที่ไม่มี AVX ไปใช้ และ ใช้งาน Tensorflow รุ่นตั้งแต่ 1.6 เป็นต้นมาไม่ได้ จบข่าว

Read More »

python #02 – ติดตั้ง Tensorflow และ Keras

ต่อจาก python #01 – ติดตั้ง jupyter notebook บน Windows ต่อไปเราจะใช้ Machine Learning Library “Tensorflow” และใช้ “Keras” ซึ่งเป็น High-level Neuron Network API ซึ่งจะไปเรียกใช้ Backend คือ Tensorflow อีกชั้นหนึ่ง จาก jupyter notebook ทำตามขั้นตอนต่อไปนี 1.  คำสั่งต่อไปนี้ เพื่อติดตั้ง Tensorflow 2.  คำสั่งต่อไปนี้ เพื่อติดตั้ง Keras จะได้ผลประมาณนี้ สร้าง Neural Network ด้วย Keras เริ่มจาก import ส่วนต่าง ๆ ได้แก่ Models และ Layers สมมุติเราจะสร้าง Model แบบนี้ เสร็จแล้วก็ต้อง compile ตั้งค่า Hyperparameters ต่าง ๆ ดู Summary ได้ผลประมาณนี้

Read More »

python #01 – ติดตั้ง jupyter notebook บน Windows

jupyter Notebook เป็น Open Source Web Application ให้เราสามารถเขียนภาษา python ได้ง่ายขึ้น สามารถ Share ได้ด้วย และยังสามารถใส่คำอธิบาย (Markdown) ได้ด้วย ติดตั้งลงในเครื่องส่วนตัวได้ ในบทความนี้ แสดงวิธีติดตั้งและใช้งานบน Microsoft Windows ดังนี้ 1. ขั้นแรก ต้องมี Python ก่อน (หมายเหตุ: ณ เวลานี้ 27/11/61 รุ่นล่าสุดคือ 3.7.1 แต่เนื่องจากจะแนะนำการใช้งาน Tensorflow, Keras จึงยังต้องเลือกใช้ Python 3.6.7) https://www.python.org/ftp/python/3.6.7/python-3.6.7.exe เมื่อติดตั้งแล้ว ควร Restart เครื่องสักหนึ่งครั้ง 2. ติดตั้ง pip ซึ่งใช้ในการติดตั้งเครื่องมือต่าง ๆเปิด Windows Console (กดปุ่ม Win + R) แล้วพิมพ์คำสั่ง cmdจากนั้น ใช้คำสั่งต่อไปนี้ 3. (Optional) ติดตั้ง virtualenv เพื่อให้สามารถจัดการ Virtual Environment ได้ง่ายขึ้น เพราะอาจจะต้องทำหลาย Project ซึ่งใช้รุ่นของ Package/Module ที่แตกต่างกันบนเครื่องเดียวกัน 4. ติดตั้ง jupyter notebook 5. เมื่อติดตั้งเสร็จแล้ว ก็ใช้คำสั่งต่อไปนี้ ระบบจะเปิด Web Browser มายัง http://localhost:8888 จากนั้น คลิกที่ปุ่ม New > Python3 จากนั้น เราก็จะสามารถใช้คำสั่ง Python ทั่ว ๆ ไปได้ นอกจากนี้ ยัง Save ได้ และสามารถส่งต่อให้ผู้อื่นใช้ได้ด้วย

Read More »