Model Deployment & Tensorflow
Model Deployment dan Tensorflow merupakan dua konsep yang penting dalam memanfaatkan kekuatan dan hasil dari pelatihan model machine learning menggunakan TensorFlow. Setelah melalui proses pelatihan yang intensif, penting bagi kita untuk bisa menggunakan model tersebut di lingkungan produksi, sehingga dapat memberikan manfaat yang nyata dan dapat diakses oleh pengguna.
Model Deployment berkaitan dengan proses mengambil model yang telah dilatih dan menyediakan akses kepadanya melalui berbagai metode seperti API, aplikasi web, atau sistem terintegrasi lainnya. Proses ini melibatkan pengemasan model, pengiriman ke lingkungan produksi, dan menjalankannya secara efisien agar dapat memberikan prediksi atau hasil yang akurat dan cepat.
Hai Stupenss kali ini kita akan mempelajari bagaimana kita akan menyimpan model yang sudah kita buat, setelah kita membuat model dan melakukan training terhadap model yang kita buat dan mendapatkan hasil yang baik selanjutnya yang harus kita lakukan adalah menyimpan model yang sudah kita buat agar model tersebut dapat diimplementasikan kedalam aplikasi yang akan dikembangkan, ada beberapa cara untuk menyimpan model yang suda dibuat, diantaranya :
Jika kalian menggunakan tensorflow kalian dapat menyimpan model dengan metode model.save() untuk menyimpan seluruh model (termasuk arsitektur, bobot, dan konfigurasi) dalam format TensorFlow SavedModel atau Keras H5 format. Contoh penggunaannya :
from tensorflow.keras import models |
Menggunakan modul joblib atau pickle untuk menyimpan model dalam format serialized.
Contoh penggunaan dengan joblib:
from joblib import dump |
Contoh penggunaan dengan pickle:
import pickle |
Menggunakan metode torch.save() untuk menyimpan model dalam format serialized PyTorch. Contoh penggunaannya:
torch.save(model, 'model.pth') |
Versi ringan (lite) dari TensorFlow yang dirancang khusus untuk aplikasi mobile, embedded, dan edge devices. Setelah model dilatih, konversi model tersebut ke format TensorFlow Lite (.tflite) menggunakan TensorFlow Lite Converter.
import tensorflow as tf |
Setelah kita tahu cara menyimpan model selanjutnya yang kita akan pelajari adalah bagaimana cara menggunakan model yang sudah kita kembangkan ini pada tutorial ini kita akan menggunakan flask untuk menjalankan model pada server, berikut adalah caranya:
model.save(os.path.join('models','imageclassifier.h5'))
kita akan buat strut folder sebagai beriku
.
├── app.py
├── imageclassifier.h5
├── temp
└── templates
├── index.html
└── predic.html
import os
from flask import Flask, request, jsonify, render_template, redirect, send_from_directory, url_for
import tensorflow as tf
import PIL
import json
import numpy as np
kita akan membuat flask app dengan mengimpor beberapa dependensi seperti kode diatas. Lalu kita mengimpor model yang sudah disimpan
model = tf.keras.models.load_model('imageclassifier.h5')
lalu inisiasi flask app agar dapat berjalan pada wsgi dengan perintah berikut
app = Flask(__name__)
@app.route('/')
def index():
return(render_template('index.html'))
@app.route('/upload', methods=['GET','POST'])
def upload():
target = os.path.join('temp/')
if request.method == 'POST':
file = request.files['img']
filename = file.filename
file.save(''.join([target, filename]))
print("upload success")
return redirect('/predic/{}'.format(filename))
fungsi ini memiliki method GET dan POST kemudian terdapat target untuk menempatkan file yang akan diprediksi pada file /temp, setelah itu akan meredirect pada route predic/{} dengan format berdasarkan nama file yang diupload.
@app.route('/predic/<filename>', methods=['GET','POST'])
def predic(filename):
gambar = '/temp/'+filename
x = process_image(filename)
print(gambar)
return(render_template('predic.html', hasil=x , data=gambar))
pada route ini menampung parameter filename yaitu nama file yang diupload, setelah itu file ini akan diambil lalu akan digunakan sebagai parameter pada fungsi process_image lalu akan dikembalikan pada variabel x, ini berfungsi untuk menampilkan hasil dari proses klasifikasi.
@app.route('/predic', methods=['POST'])
def process_image(filename):
data = np.array(PIL.Image.open(r'./temp/'+filename).resize((256, 256))).tolist()
request_data = {'img': data}
request_data = json.dumps(request_data)
request_data = json.loads(request_data)
img = request_data['img']
resize = tf.image.resize(img, (256,256))
prediksi = model.predict(np.expand_dims(resize/255, 0))
print(prediksi)
hasil = ''
if prediksi > 0.5:
hasil = 'Hasil Prediksi: Sedih'
else:
hasil = 'Hasil Prediksi: Senang'
return hasil
route ini memiliki method POST yang akan mengirimkan hasil prediksi gambar, parameter gambar akan diambil dan diubah menjadi bentuk array dengan library numpy.array, kemudian diubah ukurannya menjadi 256x256,
lalu data akan ditampung dalam variabel request_data dalam bentuk json, lalu file model akan dijalankan pada prediksi = model.predict(np.expand_dims(resize/255, 0)), kemudian scor prediksi akan dicek apakah lebih dari 0.5 atau kurang, jika lebih maka akan mengembalikan pesan 'Hasil Prediksi: Sedih' yang ditampung pada hasil, dan sebaliknya akan mengembalikan pesan 'Hasil Prediksi: Senang
set FLASK_APP=app.py |
lalu kita akan dijalankan pada server lokal yang berjalan
Perfect! kita telah berhasil menjalankan model yang kita buat pada server lokal dan mengujinya, menarik bukan? Nah teman teman dapat mengeksplor dengan model lain ya, Selamat belajar!
https://www.tensorflow.org/api_docs/python/tf/keras/saving/save_model
https://codepolitan.com/blog/menyimpan-model-scikit-learn-dengan-cpickle