5分钟上手emlearn:使用Python训练模型并转换为C代码的快速指南

【免费下载链接】emlearn Machine Learning inference engine for Microcontrollers and Embedded devices 【免费下载链接】emlearn 项目地址: https://gitcode.com/gh_mirrors/em/emlearn

emlearn是一款专为微控制器和嵌入式设备设计的机器学习推理引擎,它能帮助开发者轻松地将Python训练的模型转换为高效的C代码,实现在资源受限的嵌入式系统上部署机器学习模型。本指南将带你快速掌握emlearn的核心功能,从环境搭建到模型部署,让你在5分钟内完成从Python到C的模型转换之旅。

准备工作:快速安装emlearn

要开始使用emlearn,首先需要安装这个强大的工具。你可以通过Python的包管理工具pip来轻松安装emlearn。打开终端,输入以下命令:

pip install emlearn

如果你想体验最新的功能,也可以选择从源码安装。首先克隆emlearn仓库:

git clone https://gitcode.com/gh_mirrors/em/emlearn
cd emlearn
pip install .

安装完成后,你就拥有了将机器学习模型转换为C代码的全部工具。

第一步:用Python训练模型

emlearn支持多种常见的机器学习模型,包括随机森林、决策树等。我们以经典的XOR问题为例,展示如何使用Python训练模型并将其转换为C代码。

首先,创建一个Python文件,比如xor.py。在这个文件中,我们将生成一个带有噪声的XOR数据集,并使用随机森林分类器进行训练。

以下是训练模型的核心代码:

import emlearn
import numpy
from sklearn.ensemble import RandomForestClassifier

# 创建数据集
def make_noisy_xor(seed=42):
    rng = numpy.random.RandomState(seed)
    X = rng.randn(300, 2)
    y = numpy.logical_xor(X[:, 0] > 0, X[:, 1] > 0)
    # 添加一些噪声
    flip = rng.randint(300, size=15)
    y[flip] = ~y[flip]
    return X, y

# 生成并分割数据集
X, y = make_noisy_xor()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练随机森林模型
model = RandomForestClassifier(n_estimators=10, max_depth=5, random_state=42)
model.fit(X_train, y_train)

这段代码使用scikit-learn库训练了一个随机森林模型,这是emlearn支持的众多模型之一。训练完成后,我们就可以将这个模型转换为C代码了。

第二步:将模型转换为C代码

emlearn提供了一个简单直观的API来将训练好的模型转换为C代码。只需几行代码,就能完成这一转换过程:

# 将模型转换为C代码
cmodel = emlearn.convert(model)
cmodel.save(file='xor_model.h', name='xor')

执行这段代码后,你将得到一个名为xor_model.h的文件,其中包含了模型的C代码实现。这个文件可以直接用于嵌入式项目中。

第三步:在C中使用生成的模型

生成C代码后,我们需要编写一个简单的C程序来使用这个模型。创建一个名为xor.c的文件,内容如下:

#include "xor_model.h"
#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char *argv[]) {
    if (argc != 3) {
        return -1;
    }

    // 解析输入特征
    const float a = strtod(argv[1], NULL);
    const float b = strtod(argv[2], NULL);
    const int16_t features[] = { a, b };

    // 使用emlearn生成的模型进行预测
    const int out = xor_predict(features, 2);
    printf("%d\n", out);
    return 0;
}

这个简单的程序接受两个输入特征,使用emlearn生成的xor_predict函数进行预测,并输出结果。

第四步:编译和运行C程序

接下来,我们需要编译这个C程序。emlearn提供了一个方便的函数来编译生成的模型代码:

# 编译C程序
bin_path = emlearn.common.compile_executable('xor.c', out_dir='.', include_dirs=[emlearn.includedir])

编译完成后,你可以运行生成的可执行文件来测试模型:

./xor 1 0

这个命令将输入特征(1, 0)传递给模型,应该输出1,这是XOR运算的正确结果。

在嵌入式设备上部署

emlearn的真正强大之处在于它能够在资源受限的嵌入式设备上运行。以Arduino为例,我们可以轻松地将生成的模型部署到Arduino开发板上。

emlearn在Arduino上的XOR演示

Arduino示例代码位于docs/helloworld_xor/helloworld_xor.ino,你可以直接将其上传到Arduino开发板,体验在嵌入式设备上运行机器学习模型的乐趣。

在线体验:浏览器中的emlearn

如果你想快速体验emlearn的功能,还可以通过浏览器来运行模型。emlearn提供了一个WebAssembly版本,可以直接在浏览器中运行C代码。

emlearn XOR浏览器演示

你可以在docs/helloworld_xor/xor_browser.html找到这个示例,只需在浏览器中打开该文件,就可以交互式地测试XOR模型。

总结

通过本指南,你已经了解了如何使用emlearn将Python训练的机器学习模型转换为C代码,并在嵌入式设备上部署运行。emlearn的强大之处在于它能够在资源受限的环境中高效运行,为嵌入式系统带来机器学习的能力。

无论是智能家居设备、工业传感器还是可穿戴设备,emlearn都能帮助你轻松实现机器学习功能。现在就开始探索emlearn的更多可能性吧!

【免费下载链接】emlearn Machine Learning inference engine for Microcontrollers and Embedded devices 【免费下载链接】emlearn 项目地址: https://gitcode.com/gh_mirrors/em/emlearn

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐