ต่อจาก python #03 – Train/Validation/Test and Accuracy Assessment with Confusion Matrix
เมื่อสร้าง Neural Network Model แล้วทำการ Train/Test ปรับค่า Hyper parameters จนได้ผลเป็นที่พอใจแล้ว (Accuracy และ Confusion Matrix ให้ค่าที่รับได้) ก็สามารถเก็บ Model นี้เอาไว้ใช้งานภายหลัง ไม่ต้องเริ่มต้น Train ใหม่ โดยใช้คำสั่ง

ก็จะได้ไฟล์ (ตามตัวอย่างนี้) ชื่อ example_model.h5 สามารถนำไปใช้บนเครื่อง Production ได้ โดยเรียกใช้งานด้วยคำสั่ง

จากนั้น ก็จะสามารถใช้ mode.predict() เพื่อใช้งานได้ตามต้องการ
ต่อ การสร้าง RESTful API สำหรับใช้งานจริง ง่าย ๆ ด้วย Flask และ Waitress ก็สามารถนำ Model นี้ไป Deploy เป็น RESTful API ได้เช่นกัน โดยเพิ่ม
# load Model
from keras.models import load_model
model = load_model('example_model.h5')
และ
y_predict=model.predict(data)
result=y_predict.argmax(axis=1)[0]

จากนั้น ก็สั่ง
python waitress_server.py
เพื่อส่งค่าผ่าน Postman ไป ที่ Server ก็จะ Error ว่า

เหตุ เพราะยังไม่ได้มีการสร้าง Tensorflow Graph ขึ้นมา ดังนั้น ต้องเพิ่มคำสั่งต่อไปนี้
# Tensorflow Graph
import numpy as np
import tensorflow as tf
graph = tf.get_default_graph()
และ
with graph.as_default():
y_predict=model.predict(np_data)

จากนั้น restart waitress_server แล้วส่งค่าเข้าไปใหม่

ก็จะได้การ Prediction แล้ว
หวังว่าจะเป็นประโยชน์ครับ