Traffine I/O

Bahasa Indonesia

2023-03-07

Mengubah Model Scikit-learn menjadi ONNX dan Melakukan Inferensi

Pendahuluan

Dalam artikel ini, saya akan membahas cara mengubah model Scikit-learn menjadi format ONNX, dan melakukan inferensi menggunakan model ONNX.

Persiapkan Model Scikit-learn Anda

Pada bab ini, saya akan membahas cara membuat dan melatih model Scikit-learn serta menyimpannya untuk digunakan di kemudian hari. Kita akan menggunakan dataset Iris dan membuat model Regresi Logistik sebagai contoh.

Buat dan Latih Model Scikit-learn

Sebelum mengubah model menjadi ONNX, Anda perlu membuat dan melatih model Scikit-learn. Pada contoh ini, kita akan membuat model Regresi Logistik sederhana menggunakan dataset Iris.

python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Load the Iris dataset
iris = load_iris()
X, y = iris.data, iris.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train the Logistic Regression model
model = LogisticRegression()
model.fit(X_train, y_train)

Dengan menggunakan fungsi train_test_split, kita telah membagi dataset menjadi set pelatihan dan pengujian. Kemudian, kita membuat sebuah instance dari kelas LogisticRegression dan mem-fit model menggunakan data pelatihan.

Simpan Model Scikit-learn Anda

Setelah model dilatih, penting untuk menyimpannya agar dapat digunakan nanti untuk konversi atau tujuan lainnya. Untuk menyimpan model Scikit-learn yang dilatih, Anda dapat menggunakan library joblib, yang efisien untuk menyimpan array NumPy yang besar, seperti model Scikit-learn.

python
import joblib

# Save the model to a file
joblib.dump(model, 'logistic_regression_model.pkl')

Potongan kode ini menyimpan model Regresi Logistik yang dilatih ke dalam file bernama logistic_regression_model.pkl.

Konversi Model Scikit-learn Anda ke ONNX

Pada bab ini, saya akan membahas langkah-langkah untuk mengubah model Scikit-learn menjadi model ONNX. Hal ini akan memungkinkan Anda memanfaatkan keuntungan ONNX, seperti dukungan lintas platform dan interoperabilitas dengan berbagai kerangka kerja deep learning.

Instal ONNXMLTools

Untuk mengubah model Scikit-learn menjadi model ONNX, Anda perlu menginstal paket ONNXMLTools, yang menyediakan utilitas untuk mengonversi model dari berbagai kerangka kerja machine learning menjadi format ONNX. Untuk Scikit-learn, kita akan menggunakan paket skl2onnx, yang merupakan bagian dari ONNXMLTools:

bash
$ pip install skl2onnx

Konversi Model

Dengan paket skl2onnx terinstal, Anda sekarang dapat mengonversi model Scikit-learn menjadi model ONNX. Untuk melakukan hal ini, Anda perlu menggunakan fungsi convert_sklearn yang disediakan oleh skl2onnx. Selain itu, Anda perlu menentukan jenis data masukan untuk model Anda.

Pada contoh kita, kita akan mengonversi model Regresi Logistik yang sudah disimpan sebelumnya.

python
import onnxmltools
from skl2onnx import convert_sklearn
from skl2onnx.common.data_types import FloatTensorType

# Load the Scikit-learn model from the saved file
model = joblib.load('logistic_regression_model.pkl')

# Convert the Scikit-learn model to ONNX
onnx_model = convert_sklearn(model, 'logistic_regression_onnx', [('input', FloatTensorType([None, 4]))])

# Save the ONNX model to a file
onnxmltools.utils.save_model(onnx_model, 'logistic_regression_model.onnx')

Pada potongan kode ini, pertama-tama kita memuat model Scikit-learn yang telah disimpan menggunakan joblib.load. Kemudian, kita memanggil fungsi convert_sklearn, yang memerlukan model, nama untuk model ONNX, dan jenis data masukan. Dalam hal ini, kita menggunakan tipe FloatTensorType dengan ukuran batch yang dinamis (ditandai dengan None) dan ukuran fitur yang tetap sebesar 4. Akhirnya, kita menyimpan model ONNX yang diubah ke dalam file bernama logistic_regression_model.onnx.

Inferensi Menggunakan Model ONNX yang Telah Diubah

Pada bab ini, saya akan menunjukkan cara melakukan inferensi menggunakan model ONNX yang telah diubah. Hal ini melibatkan instalasi ONNX Runtime, memuat model ONNX, dan membuat prediksi menggunakan model.

Instal ONNX Runtime

Untuk melakukan inferensi dengan model ONNX, Anda perlu menginstal ONNX Runtime, mesin inferensi yang tinggi kinerjanya untuk model ONNX. ONNX Runtime dapat diinstal menggunakan pip:

bash
$ pip install onnxruntime

Muat Model ONNX

Setelah ONNX Runtime terinstal, Anda dapat memuat model ONNX menggunakan kelas InferenceSession yang disediakan oleh ONNX Runtime:

python
import onnxruntime as rt

# Load the ONNX model
sess = rt.InferenceSession('logistic_regression_model.onnx')

Membuat Prediksi

Sekarang model ONNX telah dimuat, Anda dapat membuat prediksi menggunakan model. Untuk melakukan hal ini, Anda perlu menyiapkan data masukan dan memanggil metode run pada objek InferenceSession.

Pada contoh kita, kita akan menggunakan data pengujian dari dataset Iris:

python
import numpy as np

# Prepare the input data
input_data = np.array(X_test, dtype=np.float32)
input_name = sess.get_inputs()[0].name

# Make predictions using the ONNX model
output_name = sess.get_outputs()[0].name
predictions = sess.run([output_name], {input_name: input_data})[0]

Pada potongan kode ini, kita pertama-tama mengubah data masukan (yaitu, X_test) menjadi array NumPy dengan tipe float32. Kemudian, kita mengambil nama masukan dan keluaran model menggunakan metode get_inputs dan get_outputs, masing-masing. Akhirnya, kita memanggil metode run pada objek InferenceSession, melewatkan nama keluaran dan sebuah kamus yang memetakan nama masukan ke data masukan. Prediksi dikembalikan dalam bentuk array NumPy.

Referensi

https://github.com/onnx/sklearn-onnx

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!