前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >m2cgen生成机器学习c语言推理代码 - plus studio

m2cgen生成机器学习c语言推理代码 - plus studio

作者头像
plus sign
发布2024-02-29 08:32:38
2020
发布2024-02-29 08:32:38
举报
文章被收录于专栏:个人博客

m2cgen生成机器学习c语言推理代码

众所周知,cubemx是一个用于生成嵌入式的代码的好东西虽然我没用过。它的原理是将原本的矩阵运算和tensor变成了一个c的数组,同时会对代码进行优化,然后进行运算。

但是如果我们需要在其他平台上使用其他语言就很尴尬了,因为我们没有cubemx来做生成和优化。感谢蓬勃发展的社区,m2cgen解决了我们的问题。

使用起来非常简单,我们使用xgboost举例,先训练一个xgboost模型

代码语言:text
复制
from sklearn.datasets import load_diabetes
from sklearn import linear_model

X, y = load_diabetes(return_X_y=True)

estimator = linear_model.LinearRegression()
estimator.fit(X, y)

然后导出c代码

代码语言:text
复制
import m2cgen as m2c
code = m2c.export_to_c(estimator)
with open ('model.c', 'w') as f:
   f.write(code)

我们可以看到导出的代码已经是纯c语言的代码了,是以一个函数保存的

代码语言:text
复制
double score(double * input) {
    return 152.13348416289597 + input[0] * -10.009866299810508 + input[1] * -239.81564367242302 + input[2] * 519.845920054461 + input[3] * 324.38464550232334 + input[4] * -792.1756385522302 + input[5] * 476.73902100525737 + input[6] * 101.04326793803405 + input[7] * 177.06323767134606 + input[8] * 751.2736995571034 + input[9] * 67.62669218370456;
}

如果你遇到了这样的一个错误

代码语言:text
复制
base_score = -math.log(1.0 / self._base_score - 1.0)
                           ~~~~^~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for /: 'float' and 'NoneType'

这是由于xgboost模型字段发生变化导致的,在m2c.export_to_c之前加入model.base_score = 0 就行

代码语言:text
复制
import m2cgen as m2c
model.base_score = 0
code = m2c.export_to_c(estimator)
with open ('model.c', 'w') as f:
   f.write(code)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-9-7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • m2cgen生成机器学习c语言推理代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档