主要内容

命令行机器学习模型预测的代码生成

这个例子展示了如何在命令行生成用于预测分类和回归模型对象的代码。您还可以使用MATLAB®Coder™应用程序生成代码利用MATLAB编码器应用程序生成机器学习模型预测的代码获取详细信息。

某些分类和回归模型对象具有预测随机支持代码生成的函数。金宝app使用这些对象函数进行预测需要经过训练的分类或回归模型对象,但是arg游戏选择codegen(MATLAB编码器)不接受这些对象。通过使用saveLearnerForCoder而且loadLearnerForCoder如本例所述。

该流程图显示了分类和回归模型对象的对象函数的代码生成工作流程。

在你训练一个模型后,通过使用保存训练的模型saveLearnerForCoder.定义一个入口点函数,该函数通过loadLearnerForCoder并调用对象函数。然后使用生成入口点函数的代码codegen,并验证生成的代码。

列车分类模型

训练一个配备了支持代码生成的分类模型对象预测函数。在这种情况下,训练一个支持向量机(SVM)分金宝app类模型。

负载fisheririsInds = ~strcmp(种,“setosa”);X = meas(inds,3:4);Y = species(inds);Mdl = fitcsvm(X,Y);

例如,这一步可以包括数据预处理、特征选择和使用交叉验证优化模型。

使用保存模型saveLearnerForCoder

将分类模型保存到文件中SVMModel.mat通过使用saveLearnerForCoder

saveLearnerForCoder (Mdl“SVMModel”);

saveLearnerForCoder将分类模型保存到MATLAB二进制文件中SVMModel.mat作为当前文件夹中的结构数组。

定义入口点函数

一个入口点函数,也称为顶级主要的函数,是为代码生成而定义的函数。因为您不能在顶层使用codegen,您必须定义一个入口点函数来调用启用代码生成的函数,并通过使用为入口点函数生成C/ c++代码codegen.入口点函数中的所有函数都必须支持代码生成。金宝app

定义一个入口点函数,为输入预测器数据返回预测标签。在函数中,通过使用加载训练好的分类模型loadLearnerForCoder,然后将加载的模型传递给预测.在本例中,定义predictLabelsSVM函数,该函数使用SVM模型预测标签Mdl

类型predictLabelsSVM.m显示predictLabelsSVM的内容。m文件
function label = predictLabelsSVM(x) %#codegen % predictLabelsSVM使用训练好的SVM模型Mdl标记新的观察结果% predictLabelsSVM使用%保存的SVM模型Mdl和预测器数据x预测标签的矢量标签。Mdl = loadLearnerForCoder('SVM model ');label = predict(Mdl,x);结束

添加% # codegen编译器指令(或pragma)到函数入口点之后的函数签名,以表明您打算为MATLAB算法生成代码。添加此指令将指导MATLAB代码分析器帮助您诊断和修复在代码生成过程中可能导致错误的违规行为。看到使用代码分析器检查代码(MATLAB编码器)

注意:如果单击该页右上方部分的按钮并在MATLAB®中打开此示例,则MATLAB®将打开示例文件夹。此文件夹包括入口点函数文件。

生成代码

设置编译器

要生成C/ c++代码,您必须能够访问配置正确的C/ c++编译器。MATLAB Coder定位并使用支持的,已安装的编译器。金宝app你可以使用墨西哥人设置查看和更改默认编译器。详情请参见更改默认编译器

使用生成代码codegen

生成入口点函数的代码codegen(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。在调用时指定入口点函数的所有输入的数据类型和大小codegen通过使用arg游戏选择。

在这种情况下,通过X的值arg游戏选项,指定生成的代码必须接受与训练数据具有相同数据类型和数组大小的输入X

codegenpredictLabelsSVMarg游戏{X}
代码生成成功。

如果在编译时观察数未知,您还可以使用将输入指定为可变大小coder.typeof(MATLAB编码器).详细信息请参见为代码生成指定可变大小的参数而且指定入口点函数输入的属性(MATLAB编码器)

构建类型

MATLAB Coder可以为以下构建类型生成代码:

  • MEX (MATLAB可执行)函数

  • 独立的C/ c++代码

  • 编译成静态库的独立C/ c++代码

  • 编译成动态链接库的独立C/ c++代码

  • 编译成可执行文件的独立C/ c++代码

属性指定生成类型配置选择codegen(MATLAB编码器).有关设置代码生成选项的详细信息,请参见配置选择codegen(MATLAB编码器)而且配置生成设置(MATLAB编码器)

默认情况下,codegen生成一个MEX函数。MEX函数是一个C/ c++程序,可在MATLAB中执行。您可以使用MEX函数来加速MATLAB算法,并测试生成的代码的功能和运行时问题。详细信息请参见MATLAB算法加速(MATLAB编码器)而且为什么在MATLAB中测试MEX函数?(MATLAB编码器)

代码生成报告

您可以使用报告标志以生成代码生成报告。此报告帮助您调试代码生成问题并查看生成的C/ c++代码。详细信息请参见代码生成报告(MATLAB编码器)

验证生成的代码

测试一个MEX函数,以验证生成的代码提供与原始MATLAB代码相同的功能。要执行此测试,请使用与运行原始MATLAB代码相同的输入运行MEX函数,然后比较结果。在生成独立代码之前在MATLAB中运行MEX函数还使您能够检测和修复难以在生成的独立代码中诊断的运行时错误。详情请参见为什么在MATLAB中测试MEX函数?(MATLAB编码器)

通过一些预测器数据来验证是否预测predictLabelsSVM,与MEX函数返回相同的标签。

labels1 =预测(Mdl,X);labels2 = predictLabelsSVM(X);labels3 = predictLabelsSVM_mex(X);

通过使用比较预测的标签isequal

verifyMEX = isequal(labels1,labels2,labels3)
verifyMEX =逻辑1

isequal返回逻辑1 (真正的),这意味着所有的输入都是相等的。这一比较证实了预测函数,predictLabelsSVM函数和MEX函数返回相同的标签。

另请参阅

(MATLAB编码器)|||

相关的话题