代码生成简介
MATLAB®编码器™从支持代码生成的统计和机器学习工具箱™函数生成可读和可移植的C和c++代码。您可以将生成的代码作为源代码、静态库或动态库集成到您的项目中。您还可以在MATLAB环境中使用生成的代码来加速MATLAB代码的计算密集型部分。
生成C/ c++代码要求MATLAB编码器并具有以下局限性:
在使用生成代码时,不能调用顶层的任何函数
codegen
(MATLAB编码器)。相反,调用函数中的入口点函数,然后从入口点函数生成代码。入口点函数,也称为顶级或主要的函数,是你为代码生成定义的函数。入口点函数中的所有函数都必须支持代码生成。的MATLAB编码器限制也适用于统计和机器学习工具箱的代码生成。有关详细信息,请参见支持C/ c++代码生成的MATLAB语言特性(MATLAB编码器)。
统计和机器学习工具箱中的代码生成不支持稀疏矩阵。
关于每个函数的代码生成使用说明和限制,请参见函数参考页的代码生成部分。
有关支持代码生成的统计和机器学习工具箱函数列表,请参见函数列表(C/ c++代码生成)。
代码生成工作流
您可以通过几种方式为统计和机器学习工具箱函数生成C/ c++代码。
对于不是机器学习模型的目标函数的函数的通用代码生成工作流
定义一个入口点函数调用支持代码生成的函数,通过使用为入口点函数生成C/ c++代码
codegen
(MATLAB编码器),然后验证生成的代码。入口点函数,也称为顶级或主要的函数,是你为代码生成定义的函数。因为你不能在顶层使用调用任何函数codegen
,您必须定义一个入口点函数。入口点函数中的所有函数都必须支持代码生成。有关详细信息,请参见通用代码生成工作流。
一个机器学习模型的对象函数的代码生成工作流(包括
预测
,随机
,knnsearch
,rangesearch
,isanomaly
,和增量学习对象函数)保存一个训练有素的模型使用
saveLearnerForCoder
,并定义一个入口点函数,该函数加载保存的模型by使用loadLearnerForCoder
并调用对象函数。然后用生成入口点函数的代码codegen
(MATLAB编码器),并验证生成的代码。入口点函数的输入参数不能是分类或回归模型对象。因此,您需要通过使用来绕过这个限制saveLearnerForCoder
和loadLearnerForCoder
。还可以生成单精度的C/ c++代码,用于机器学习模型的预测,用于分类和回归。对于单精度代码生成,指定名称-值对参数
“数据类型”、“单”
的附加输入loadLearnerForCoder
函数。详细信息,请参见这些示例
还可以生成定点C/ c++代码,用于预测支持向量机(SVM)模型、决策树模型以及用于分类和回归的决策树集合。这种类型的代码生成需要固定点设计器™。
定点代码生成需要一个额外的步骤,定义预测所需变量的定点数据类型。通过使用生成的数据类型函数来创建定点数据类型结构
generateLearnerDataTypeFcn
,并使用该结构作为的输入参数loadLearnerForCoder
在一个入口点函数。还可以在生成代码之前优化定点数据类型。有关详细信息,请参见支持向量机预测的定点代码生成。
的代码生成工作流
预测
和更新
树模型、支持向量机模型、线性模型或使用支持向量机或线性二元学习器的多类纠错输出编码(ECOC)分类模型的功能训练一个模型后,通过使用创建一个编码器配置器
learnerCoderConfigurer
,通过使用生成代码generateCode
,然后验证生成的代码。您可以配置代码生成选项,并使用对象属性指定模型参数的编码器属性。在你用新的数据或设置重新训练模型之后,你可以在生成的C/ c++代码中更新模型参数,而不必重新生成代码。这个特性减少了重新生成、重新部署和重新验证C/ c++代码所需的工作量。有关详细信息,请参见使用Coder Configurer进行预测和更新的代码生成。
代码生成的应用程序
将机器学习模型的预测集成到Simulink中®,使用MATLAB函数块或统计和机器学习工具箱库中的Simulink块。详细信息请参见以下示例:
统计和机器学习工具箱功能的代码生成也可以与其他工具箱如System object™和Stateflow一起工作®,如以下例子所述:
关于代码生成的更多应用,参见以下示例:
另请参阅
codegen
(MATLAB编码器)|saveLearnerForCoder
|loadLearnerForCoder
|learnerCoderConfigurer
|generateLearnerDataTypeFcn
相关的话题
- 开始使用MATLAB Coder(MATLAB编码器)