Skip to main content

1. Model Deployment - Tensorflow.html

Pendahuluan

Save Model

TensorFlow:

Scikit-learn:

PyTorch:

TensorFlow Lite (TFLite) :

Cara menggunakan model

Quiz

Referensi

 

Model Deployment & Tensorflow

Pendahuluan

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.

Save Model

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 :

 

TensorFlow:

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
model.save(
'nama_model')

Scikit-learn:

Menggunakan modul joblib atau pickle untuk menyimpan model dalam format serialized.

Contoh penggunaan dengan joblib:

from joblib import dump
dump(model,
'model.joblib')

Contoh penggunaan dengan pickle:

import pickle
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)

PyTorch:

Menggunakan metode torch.save() untuk menyimpan model dalam format serialized PyTorch. Contoh penggunaannya:

torch.save(model, 'model.pth')

TensorFlow Lite (TFLite) :

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

# Load model yang telah dilatih
model = tf.keras.models.load_model(
'model.h5')

# Konversi model ke TFLite
converter = tf.lite.FLite Converter.from_keras_model(model)
tflite_model = converter.convert()

# Simpan model TFLite
with open('model.tflite', 'wb') as f:
f.write(tflite_model)

 

Cara menggunakan model

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:

  1. Pada contoh ini menggunakan model yang dapat mengklasifikasi wajah apakah menunjukkan ekspresi gembira atau sedih, kita akan menyimpan model yang sudah dilatih pada google collab dengan library tensorflow.keras.models dengan metode model.save()

Model yang dibuat

model.save(os.path.join('models','imageclassifier.h5'))

 

  1. Setelah model disimpan dengan format h5, langkah selanjutnya adalah membuat flask app yang akan menampung model serta menjalankannya pada server.

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__)

 

  1. Kita juga akan buat fungsi routing untuk memanggil model yang sudah disimpan pada flask app, setelah itu kita akan menjalankan aplikasi yang sudah dibuat pada server.
    1. Routing home yang menampilkan halaman index.html

@app.route('/')

def index():

return(render_template('index.html'))

    1. Routing untuk fungsi upload gambar yang akan diprediksi

@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.

    1. Pada route /predic/<filename> akan menjalankan method GET dan POST

@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.

    1. Pada route /predic ini memiliki fungsi process_image() yang akan menjalankan 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

 

  1. Kita akan menguji app kita pada server dengan flask run, sebelumnya kita akan seting app flask kita yang akan dieksekusi

set FLASK_APP=app.py
set FLASK_ENV=development

flask run

lalu kita akan dijalankan pada server lokal yang berjalan

Flask app pada server

Menguji gambar

Hasil prediksi

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!

Quiz

 

Referensi

https://www.tensorflow.org/api_docs/python/tf/keras/saving/save_model

https://codepolitan.com/blog/menyimpan-model-scikit-learn-dengan-cpickle

https://towardsdatascience.com/deploying-keras-models-using-tensorflow-serving-and-flask-508ba00f1037

https://medium.com/analytics-vidhya/deploy-ml-tensorflow-model-using-flask-backend-frontend-12a38ce53b7f

 

 

Last modified: Monday, 7 August 2023, 10:11 AM