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.
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.
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:
$ 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.
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:
$ pip install onnxruntime
Muat Model ONNX
Setelah ONNX Runtime terinstal, Anda dapat memuat model ONNX menggunakan kelas InferenceSession
yang disediakan oleh ONNX Runtime:
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:
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