m2cgen库:将机器学习模型转换为零依赖的本机代码(Java,C,Python,Go,JavaScript)。本文演示将其转换为C/C++代码,使用sklearn机器学习库中的随机森林回归,训练波士顿数据集,而后导出为C代码,并在visual studio中编译运行。

m2cgen库的github地址:https://github.com/markWZX/m2cgen

  1. 首先安装m2cgen库,在命令行窗口输入:pip install m2cgen (Python版本> = 3.4)。
  2. 打开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代码的正确性

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐