m2cgen库:将Python(sklearn)训练的模型转化为CC++代码
m2cgen库:将机器学习模型转换为零依赖的本机代码(Java,C,Python,Go,JavaScript)。本⽂演⽰将其转换为C/C++代码,使⽤sklearn机器学习库中的随机森林回归,训练波⼠顿数据集,⽽后导出为C代码,并在visual studio中编译运⾏。
1. ⾸先安装m2cgen库,在命令⾏窗⼝输⼊:pip install m2cgen (Python版本> = 3.4)。
2. 打开pycharm,输⼊以下代码:
from sklearn.datasets import load_boston
semble 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 = port_to_c(model)#导出为c代码
print(code)
导出的c代码有1万多⾏(这个库最⼤的问题就是转化出来的C++代码太长了,导致都编译不了,慎⽤!会出现的错误:节数超过对象⽂件格式限制:请使⽤/bigobj进⾏编译,我按⽹上的教程设置了/bigobj但还是编译不了),就不在此粘贴了,将其复制到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);
//}
python转java代码finish =clock();
totaltime =(double)(finish - start)/ CLOCKS_PER_SEC;
cout <<"\n此程序的运⾏时间为"<< totaltime <<"秒!"<< endl;
std::cout << output << std::endl;
}
输出结果为:35.91
在Python中的结果为34.7,可验证C代码的正确性
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论