m2cgen库:将Python(sklearn)训练的模型转化为C/C++代码
m2cgen库:将机器学习模型转换为零依赖的本机代码(Java,C,Python,Go,JavaScript)。本文演示将其转换为C/C++代码,使用sklearn机器学习库中的随机森林回归,训练波士顿数据集,而后导出为C代码,并在visual studio中编译运行。m2cgen库的github地址:https://github.com/markWZX/m2cgen首先安装m2cgen库,在命令
文章共940字 · 阅读需要大约4分钟
一键AI生成摘要,助你高效阅读
问答
·
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万多行(这个库最大的问题就是转化出来的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);
//}
finish = clock();
totaltime = (double)(finish - start) / CLOCKS_PER_SEC;
cout << "\n此程序的运行时间为" << totaltime << "秒!" << endl;
std::cout << output << std::endl;
}
输出结果为:35.91
在Python中的结果为34.7,可验证C代码的正确性
更多推荐
已为社区贡献1条内容
所有评论(0)