C语言调用python训练的机器学习模型(项目需求轻体量)
问题描述
机器学习模型基本上都是python下的实现与使用,有关C如何调用训练好的模型或是C实现模型的相关教程相对较少
同时,项目需求整个模型大小尽可能小,大概在几十Kb
由于是表格类型的数据,因此主要考虑树模型
一般而言,更常见的C语言使用机器学习模型为两种:
- 一种是下载对应的机器学习模型的库,然后在C语言中部署,然后调用python训练好的模型
- 一种是下载onnx包,C语言中部署,然后调用python训练好的模型
但是这两种方法都需要下载对应的包,即便是机器学习模型进行了轻体量的优化,这些包的体量却是无法避免的,因此再无进行下去的必要
因此,需要考虑不适用包的方法,也可以分为两种方法:
- 一种是直接在C中手搓个简单的模型出来,然后进行训练和预测,但是这种方法很考验基础,而且很难进行参数调优
- 一种是根据python训练后的模型,查看树的结构,然后根据树的结构使用if条件进行复现。这种方法是最暴力的,但是模型的每一次修改将是重复机械的大量工程
而m2cgen是一个python包,可以将你的模型自动转为文本,也就是代替自己手写实现了最后一个方法,简直是神器。
问题解决
接下来就是python对模型进行优化,然后使用m2cgen导出为一个函数文本,不再需要任何多余的安装包,直接复制到c或cpp文件里调用该函数就可以,后续模型更新也只需要把该函数进行替换即可,十分方便。
相关文章:
C语言调用python训练的机器学习模型(项目需求轻体量)
问题描述 机器学习模型基本上都是python下的实现与使用,有关C如何调用训练好的模型或是C实现模型的相关教程相对较少 同时,项目需求整个模型大小尽可能小,大概在几十Kb 由于是表格类型的数据,因此主要考虑树模型 一般而言&#…...
get和post请求的区别以及post请求的url参数问题
1.主要区别 1.GET请求方法有以下几个特点: 默认的请求方法;GET请求通常用于获取信息,所以应该是安全的、幂等的;请求数据表现在URL上,以名称/值的形式发送。对请求的长度有限制;在IE和Opera等浏览器会产生…...
android NullPointerException externalCacheDir
先看代码: fun Context.getMyCacheDir(): String {return externalCacheDir!!.absolutePath "/my_cache" }如上代码,在某些手机可能会出现crash。 原因详细阅读api,注意他有一个大大的注解Nullable: Nullablepublic a…...
设计模式-过滤器模式(使用案例)
过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式…...
成功解决修改已经push到远程git仓库的commit message
1.使用 Git 命令行进入要修改的项目目录。 2.运行 git log 命令查看提交历史,找到要修改的提交的哈希值(commit hash)。 3.运行 git rebase -i <commit hash> 命令,将 <commit hash> 替换为要修改的提交的哈希值。这将…...
Ubuntu18.04 交叉编译openssl-1.1.1
源码下载地址: openssl 此处使用的是openssl-1.1.1-pre5.tar.gz 解压: $tar -zxvf openssl-1.1.1-pre5.tar.gz $cd openssl-1.1.1-pre5/ 执行配置生成Makefile: $./config no-asm shared --prefix$PWD/__install 或者 $./config no-asm shared no-…...
七夕学算法
目录 P1031 [NOIP2002 提高组] 均分纸牌 原题链接 : 题面 : 思路 : 代码 : P1036 [NOIP2002 普及组] 选数 原题链接 : 题面 : 思路 : 代码 : P1060 [NOIP2006 普及组] 开心的金明 原题链接 : 题面 : 思路 : 01背包例题 : 代码 : P1100 高低位交换 原题…...
在C++中利用rapidjson实现Python中的字典(Dict)
python 中的dict如下: Dicts = {"Stain":{"ResultType": "Physics","Results": [{"Key": "KeyPoints","Title": "瑕疵区域","Unit": "","Value": stainlist…...
数组和指针练习(3)
题目: int main() { int a[5][5]; int(*p)[4]; p a; printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]); return 0; } 思路分析: int(*p)[4]; 定义了指针变量p是一个数组指针,且该数组指…...
如何用树莓派Pico针对IoT编程?
目录 一、Raspberry Pi Pico 系列和功能 二、Raspberry Pi Pico 的替代方案 三、对 Raspberry Pi Pico 进行编程 硬件 软件 第 1 步:连接计算机 第 2 步:在 Pico 上安装 MicroPython 第 3 步:为 Thonny 设置解释器 第 4 步ÿ…...
【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)
本系列其他文章 【填坑向】MySQL常见报错及处理系列(Communications link failure & Access denied for user ‘root‘‘localhost‘)_AQin1012的博客-CSDN博客翻一下大致的意思就是默认会按照如下的顺序读取配置文件,我上面贴出的配置文…...
如何处理MySQL自增ID用完
检查当前自增ID的最大值:你可以使用以下SQL查询语句来获取当前最大的自增ID值: SELECT MAX(id) FROM your_table;假设你的表名为 your_table 和自增ID列名为 id。 确定使用的自增ID类型:根据当前最大值来判断你使用的自增ID类型。如果当前…...
Docker 安装教程【菜鸟级】
文章目录 前言1.安装及环境1.1.Linux安装1.2.Windows安装 2.初识Docker2.1.进入docker2.2.命令行基本操作 Docker实例Docker安装Centos使用启动、关闭、删除容器将主机中的文件放入容器中的方式查看容器日志 前言 1.安装及环境 1.1.Linux安装 1.2.Windows安装 2.初识Docker…...
centos7.9 用docker安装mysql8.0
一.安装docker 切换到root1.安装依赖包 $ yum install -y yum-utils2.registry更换阿里源 $ yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ sed -i s/download.docker.com/mirrors.aliyun.com\/docker-ce/g /etc/yum.…...
JVM和消息队列面经(自用)
JVM和消息队列面试八股文,自用。 Minor GC、Young GC、Full GC、Old GC、Major GC、Mixed GC 一文搞懂 - 知乎 32 道 JVM 面试题总结(含答案解析和思维导图) - 知乎 百度安全验证 JVM面经汇总_所幸你是例外的博客-CSDN博客 38道精品JVM面…...
四、pikachu之文件包含
文章目录 1、文件包含漏洞概述1.1 文件包含漏洞1.2 相关函数1.3 文件包含漏洞分类 2、File Inclusion(local)3、File Inclusion(remote) 1、文件包含漏洞概述 1.1 文件包含漏洞 文件包含漏洞:在web后台开发中,程序员往往为了提高效率以及让代码看起来更…...
【SVN内网穿透】远程访问Linux SVN服务
文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...
没消费?复购难?不如试试即拼七人拼团模式
在当今的社会环境下,快消品、大健康、美容等行业一直是人们生活中不可或缺的一部分。它们各具特色,不断满足大众的需求,因此受到广泛欢迎。但由于市场品种繁多、竞争激烈,消费者的选择也变得更加多样化。为了提高各行业的竞争性&a…...
vscode+ros开发环境搭建
目录 介绍 前提 vscode安装 vscode插件安装 工作空间准备 打开vscode 创建catkin包 编写cpp代码 编译 运行 启动ros服务 监听话题 启动ros测试 介绍 ros开发是机器人开发中必不可少的工作,语言选择可以是c,也可以是python。工具的话,不能像wi…...
10个最好的云GPU服务
随着深度学习、人工智能和机器学习等新技术的出现,云 GPU 的需求量很大。 GPU(图形处理单元)是专用处理器,用于处理计算机图形和游戏等活动所需的大量数据集和复杂计算。不过,它们现在对人工智能(A.I.&…...
PyCharm远程调试避坑指南:从数据集同步到依赖安装,搞定AuToDL服务器上的代码运行
PyCharm远程调试避坑指南:从数据集同步到依赖安装,搞定AuToDL服务器上的代码运行 在深度学习项目的实际开发中,本地环境往往难以满足大规模计算需求。许多开发者选择将代码迁移到AuToDL等云服务器上运行,却常常在远程调试环节遇到…...
Splitting.js终极指南:深度解析网页文本动画的魔法引擎
Splitting.js终极指南:深度解析网页文本动画的魔法引擎 【免费下载链接】Splitting JavaScript microlibrary to split an element by words, characters, children and more, populated with CSS variables! 项目地址: https://gitcode.com/gh_mirrors/sp/Splitt…...
终极指南:如何为MiniSearch编写自定义插件和扩展,打造专属搜索体验
终极指南:如何为MiniSearch编写自定义插件和扩展,打造专属搜索体验 【免费下载链接】minisearch Tiny and powerful JavaScript full-text search engine for browser and Node 项目地址: https://gitcode.com/gh_mirrors/mi/minisearch MiniSear…...
高效解决HTML转Word难题:浏览器端无后端文档转换全方案
高效解决HTML转Word难题:浏览器端无后端文档转换全方案 【免费下载链接】html-docx-js Converts HTML documents to DOCX in the browser 项目地址: https://gitcode.com/gh_mirrors/ht/html-docx-js 在数字化办公场景中,将网页内容快速转换为可编…...
线程与进程的区别与联系:操作系统入门详解(含 Python 示例)
、先搞懂:进程与线程到底是什么?(通俗类比官方定义) 1.1 生活化类比:快速建立认知 如果把计算机的操作系统比作一个大型工厂: 进程:就是工厂里的一个个独立车间。每个车间有自己专属的生产资…...
Balena Etcher:三步完成系统镜像烧录,告别复杂命令的困扰
Balena Etcher:三步完成系统镜像烧录,告别复杂命令的困扰 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 你是否曾经因为需要制作系统启动…...
YOLOE官版镜像案例分享:文本提示检测自定义物体实战
YOLOE官版镜像案例分享:文本提示检测自定义物体实战 1. 引言:开放词汇表检测的挑战与突破 在传统计算机视觉应用中,目标检测模型往往受限于预定义的类别集合。当需要检测训练数据中未出现的新物体时,开发者不得不重新收集数据、…...
CLIP-GmP-ViT-L-14图文匹配工具部署教程:Ubuntu 22.04 + Python 3.10 完整环境配置
CLIP-GmP-ViT-L-14图文匹配工具部署教程:Ubuntu 22.04 Python 3.10 完整环境配置 你是不是经常好奇,一张图片到底和哪段文字描述最匹配?比如,你拍了一张自家宠物的照片,想知道AI会觉得它更像“一只可爱的猫”还是“一…...
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码)
Python实战:5分钟搞定睿尔曼机械臂与AGV底盘的Socket通信(附完整代码) 在工业自动化领域,复合机器人正逐渐成为提升生产效率的关键设备。这类机器人通常由AGV(自动导引运输车)底盘和机械臂组成,…...
手把手教你为本地LLM(Llama/Qwen)实现打字机式流式输出,Gradio+Transformers保姆级教程
手把手教你为本地LLM实现打字机式流式输出:Gradio与Transformers深度整合指南 当我们在本地部署大语言模型时,最令人沮丧的体验莫过于盯着进度条等待完整响应。想象一下这样的场景:你向模型提出一个复杂问题,屏幕陷入长达十几秒的…...
