m2cgen庫:將Python(sklearn)訓練的模型轉化為C/C++程式碼
阿新 • • 發佈:2021-02-19
m2cgen庫:將機器學習模型轉換為零依賴的本機程式碼(Java,C,Python,Go,JavaScript)。本文演示將其轉換為C/C++程式碼,使用sklearn機器學習庫中的隨機森林迴歸,訓練波士頓資料集,而後匯出為C程式碼,並在visual studio中編譯執行。
m2cgen庫的github地址:https://github.com/markWZX/m2cgen
- 首先安裝m2cgen庫,在命令列視窗輸入:
pip install m2cgen
(Python版本> = 3.4)。 - 開啟pycharm,輸入以下程式碼:
from sklearn. datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
import m2cgen as m2c
boston = load_boston()
X, y = boston.data, boston.target
clf = RandomForestRegressor(random_state=0,n_jobs=-1)
model=clf.fit(X, y)
code = m2c.export_to_c(model)#匯出為c程式碼
print(code)
匯出的c程式碼有1萬多行,就不在此貼上了,將其複製到visual studio中專案的原始碼中,再手動新增一個main()函式,在main()函式中呼叫匯出來的score()函式,進行迴歸預測。(另外添加了計算程式執行時間的程式碼,畢竟1萬多行有點可怕,經過測試連續呼叫10萬次score()函式,所花時間為0.009s,所花費時間可以接受)
int main()
{
double features[] = { 2.7290e-02, 0.0000e+00, 7.0700e+00, 0.0000e+00, 4.6900e-01,
7.1850e+00, 6.1100e+01, 4.9671e+00, 2.0000e+00, 2.4200e+02,
1.7800e+01, 3.9283e+02, 4.0300e+00 };
clock_t start, finish;
double totaltime;
start = clock();
//for (int i = 0; i < 100000; ++i)
//{
double output = score(features);
//}
finish = clock ();
totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
cout << "\n此程式的執行時間為" << totaltime << "秒!" << endl;
std::cout << output << std::endl;
}
輸出結果為:35.91
在Python中的結果為34.7,可驗證C程式碼的正確性