主要内容

Generatecode.

使用编码器配置程序生成C / C ++代码

描述

培训机器学习模型后,使用使用的模型创建编码器配置器Learnercoderconfigurer。修改配置器的属性以指定代码生成选项。然后使用Generatecode.为此生成C / C ++代码预测更新机器学习模型的功能。生成C / C ++代码需要马铃薯®编码器™

此流程图显示使用编码器配置程序的代码生成工作流程。采用Generatecode.对于突出的步骤。

例子

generatecode(配置程序生成MEX(MATLAB可执行)功能预测更新使用机器学习模型的功能配置程序。生成的MEX函数被命名outputfilename.,这是存储在中的文件名outputfilename.财产配置程序

要生成MEX功能,Generatecode.首先生成在当前文件夹中生成代码所需的以下MATLAB文件:

  • 预测.M.更新.., 和初始化..-预测.M.更新..是该的入学点函数预测更新分别为机器学习模型的功能,以及这两个函数调用初始化..

  • 包含机器学习模型信息的垫文件 -Generatecode.用来Savelarnerforcoder.在存储文件名存储的Mat文件中保存机器学习模型信息的功能outputfilename.编码器配置程序的属性。初始化..通过使用使用保存的MAT文件loadlearnerforcoder.功能。

生成必要的matlab文件后,Generatecode.创建MEX函数和MEX功能的代码codegen \ mex \outputfilename.文件夹并将MEX函数复制到当前文件夹。

例子

generatecode(配置程序CFG.使用由指定的构建类型生成C / C ++代码CFG.

例子

generatecode(___,'输出路径',输出路径除了先前语法中的任何输入参数之外,还指定输出文件的文件夹路径。Generatecode.在指定的文件夹中生成MATLAB文件输出路径并在文件夹中生成C / C ++代码输出路径\ codegen \类型\outputfilename.在哪里类型是由构建类型指定的CFG.

例子

全部收缩

火车机器学习模型,然后为此生成代码预测更新使用编码器配置器来函数模型。

加载Carsmall.数据集和培训支持向量机(SVM)回归模型。金宝app

加载Carsmall.x = [马力,重量];y = mpg;mdl = fitrsvm(x,y);

MDL.是A.回归vm.目的。

为此创建一个编码器配置程序回归vm.模型通过使用Learnercoderconfigurer。指定预测器数据X。这Learnercoderconfigurer功能使用输入X配置编码器属性预测功能输入。

CONFIGURER = LERERNERCODERCONFIGURER(MDL,X)
Configurer = RegressionsVMCoderConfigurer具有属性:更新输入:Alpha:[1x1 LearnercoderInput] SupportVectors:[1x1 Lear金宝appnercoderInput]尺度:[1x1 LearnercoderInput]偏置:[1x1 LearnercoderInput]预测输入:X:[1x1学习者划线算]代码生成参数:NumOutputs:1 outputFileName:'回归vmmmodel'属性,方法

配置程序是A.回归vmcoderconfigurer对象是一个编码器配置程序回归vm.目的。

要生成C / C ++代码,您必须访问正确配置的C / C ++编译器。MATLAB编码器定位并使用支持的安装编译器。金宝app您可以使用梅克斯-设置查看和更改默认编译器。有关更多详细信息,请参阅更改默认编译器

为此生成代码预测更新SVM回归模型的功能(MDL.)默认设置。

Generatecode(Configurer)
GenerateCode在输出文件夹中创建这些文件:'Initialize.m','predict.m','update.m','回归vmmodel.mat'代码生成成功。

Generatecode.函数完成这些操作:

  • 生成生成代码所需的MATLAB文件,包括两个入口点函数预测.M.更新..为了预测更新函数MDL., 分别。

  • 创建名为MEX函数回归vmmodel.对于两个入口点函数。

  • 创建MEX函数的代码codegen \ mex \ regressionsvmmodel文件夹。

  • 将MEX函数复制到当前文件夹。

显示该内容预测.M.更新.., 和初始化..文件通过使用类型功能。

类型预测.M.
函数varargout = predict(x,varargin)%#codegen%by matlab,23-feb-2021 19:18:25 [varargout {1:nargout}] =初始化('predict',x,varargin {:});结尾
类型更新..
函数更新(varargin)%#codegen%by matlab,23-feb-2021 19:18:25初始化('更新',varargin {:});结尾
类型初始化..
函数[varargout] = initialize(命令,varargin)%#codegen%by matlab,23-feb-2021 19:18:25守则。。垫');结束开关(命令)案例'更新'%更新结构字段:alpha%supportsvectors%scale%bias model =更新(型金宝app号,varargin {:});案例'预测'%预测输入:x x = varargin {1};如果nargin == 2 [varargout {1:nargout}] = predict(model,x);否则pvPairs = cell(1,nargin-2);对于i = 1:nargin-2 pvPair {1,i} = varargin {i + 1};结束[varargout {1:nargout}] = predict(model,x,pvpaess {:});结束结束

通过使用培训的模型的编码器配置程序列车并生成代码。生成代码时,使用代码生成配置对象指定构建类型和其他配置选项。

加载电离层数据集和培训二进制支持向量机(SVM)分类模型。金宝app

加载电离层mdl = fitcsvm(x,y);

MDL.是A.分类VM.目的。

为此创建一个编码器配置程序分类VM.模型通过使用Learnercoderconfigurer。指定预测器数据X。这Learnercoderconfigurer功能使用输入X配置编码器属性预测功能输入。

CONFIGURER = LEARNERCODERCONFIGURER(MDL,X);

配置程序是A.classificationsvmcoderconfigurer对象是一个编码器配置程序分类VM.目的。

通过使用创建代码生成配置对象Coder.config.(MATLAB编码器)。指定'DLL'要生成动态库并指定GenerateReport.财产真的启用代码生成报告。

cfg = coder.config('DLL');cfg.generateReport = true;

要生成C / C ++代码,您必须访问正确配置的C / C ++编译器。MATLAB编码器定位并使用支持的安装编译器。金宝app您可以使用梅克斯-设置查看和更改默认编译器。有关更多详细信息,请参阅更改默认编译器

采用Generatecode.和配置对象CFG.生成代码。此外,请指定输出文件夹路径。

GenerateCode(Configurer,CFG,'输出路径''testpath'
指定的文件夹不存在。文件夹已创建。generatecode在输出文件夹中创建这些文件:'Initialize.m','predict.m','update.m','classificationsvmmodel.mat'代码生成成功:要查看报告,请打开('codegen / dll / classificationsvmmmodel / html/report.mldatx')。

Generatecode.创建指定的文件夹。该函数还生成生成代码所需的MATLAB文件并将其存储在文件夹中。然后Generatecode.生成C代码testpath \ codegen \ dll \ classificationsvmmodel文件夹。

使用SVM二进制学习者列出错误校正输出代码(ECOC)模型,并为模型创建一个编码器配置器。使用编码器配置器的属性来指定Ecoc模型参数的编码器属性。使用编码器配置器的对象函数来生成C代码,该C代码预测新的预测器数据的标签。然后使用不同的设置重新培训模型,并在未生成代码中更新参数而无需重新生成代码。

火车模型

装载Fisher的Iris数据集。

加载渔民x = meas;y =物种;

创建SVM二进制学习者模板以使用高斯内核功能并标准化预测器数据。

t = templatesvm('骨箱''高斯''标准化',真的);

使用模板训练多牌ecoc模型T.

mdl = fitcecoc(x,y,'学习者',t);

MDL.是A.Classifiedecoc.目的。

创建编码器配置程序

为此创建一个编码器配置程序Classifiedecoc.模型通过使用Learnercoderconfigurer。指定预测器数据X。这Learnercoderconfigurer功能使用输入X配置编码器属性预测功能输入。此外,将输出的数量设置为2,以便生成的代码返回第一个输出预测功能,是预测标签和否定平均二进制损失。

configurer = LearnerCoderConfigurer(MDL,X,'numoutputs'2)
configurer = ClassificationCocoderConfigurer具有属性:更新输入:BinaryLearners:[1x1 ClassificationsVmcoderConfigurer]之前:[1x1 LearnercoderInput]成本:[1x1 LearnercoderInput]预测输入:X:[1x1 LearnerCoderInput]代码生成参数:NumOutputs:2 OutputFileName:'ClassificationCocModel'属性,方法

配置程序是A.classificationcoccoderconfigurer对象是一个编码器配置程序Classifiedecoc.目的。显示屏显示可调谐输入参数预测更新X二进制书事先的, 和成本

指定参数的编码器属性

指定编码器属性预测参数(预测数据和名称值对参数'解码''二元乐') 和更新参数(SVM学习者的支金宝app持向量)以便您可以将这些参数用作输入参数预测更新在生成的代码中。

首先,指定编码器属性X因此,生成的代码接受任何数量的观察。修改秘诀杂色金属依赖项属性。这秘诀属性指定预测器数据大小的上限,以及杂色金属依赖项属性指定预测器数据的每个维度是否具有可变大小或固定大小。

configurer.x.sizevector = [INF 4];configurer.x.variabledimensions = [true false];

第一维度的大小是观察的数量。在这种情况下,代码指定大小的上限是INF.大小是可变的,这意味着X可以有任何数量的观察结果。如果您不知道生成代码时的观察次数,则此规范很方便。

第二维度的大小是预测变量的数量。必须为机器学习模型固定此值。X包含4个预测因子,所以第二个值秘诀属性必须为4和第二个值杂色金属依赖项属性必须是错误的

接下来,修改编码器属性二进制数解码用来'二元乐''解码'名称 - 值对生成的代码中的参数。显示编码器属性二进制数

configur.binaryloss.
ANS = eNumerateDupput使用属性:value:'铰链'selectionOption:'内置'构建选项:{1x7 Cell} iSononstant:1可调性:0

要在生成的代码中使用非默认值,必须在生成代码之前指定值。指定价值属性二进制数作为'指数'

configur.binaryloss.value =.'指数';configur.binaryloss.
ANS = eNumerateDupput使用属性:value:'指数'选择选项:'内置'构建选项:{1x7 Cell} IsConstant:1可调性:1

如果您在何时修改属性值可调性错误的(逻辑0),软件设置可调性真的(逻辑1)。

显示编码器属性解码

configurer.decoding.
ANS = eNumerateDupput使用属性:value:'lockweighted'selectionOption:'内置'内置选项:{'lockweighted'的“丢失”} iSononstant:1可调性:0

指定iSononstant.属性解码作为错误的这样您就可以使用所有可用值内置选项在生成的代码中。

configur.decoding.isconstant = false;configurer.decoding.
ANS = eNumerateDupput使用属性:value:[1x1 LearnerCoderInput] SelectedOption:'不可置位'内置选项:{'lockwuighted''丢失备用'} iSononstant:0可调性:1

软件改变了价值属性解码到A.LearnercoderInpul.对象使您可以使用两者“失去重量”'失去了'作为价值'解码'。此外,软件设置了选择选项'不合作'可调性真的

最后,修改编码器属性金宝app支持监视器二进制书。显示编码器属性金宝app支持监视器

configur.binarylearners.su金宝apppportVectors.
ANS = LearnerCoderInput具有属性:Sizevector:[54 4] variabledimensions:[1 0]数据类型:'Double'可调性:1

默认值杂色金属依赖项[真假]因为每个学习者都有不同数量的支持向量。金宝app如果使用新数据或不同的设置重新恢复ECOC型号,则SVM学习者中的支持向量的数量可能会有所不同。金宝app因此,增加支撑载体数量的上限。金宝app

configur.binarylearners.su金宝apppportVectors.sizevector = [150 4];
alpha的Sizevector属性已被修改为满足配置约束。SizeVector属性for SupportVe金宝appctorLabels已被修改为满足配置约束。

如果修改编码器属性金宝app支持监视器,然后软件修改了编码器属性Α金宝appSupportVectorLabels.满足配置约束。如果一个参数的编码器属性的修改需要随后的改变对其他从属参数来满足配置约束,则软件改变了从属参数的编码器属性。

显示编码器配置器。

配置程序
configurer = ClassificationCocoderConfigurer具有属性:更新输入:BinaryLearners:[1x1 scresisificsvmcoderConfigurer]之前:[1x1 LearnercoderInput]预测输入:x:[1x1 inumerateDute] Binaryloss:[1x1 enumerateInput]解码:[1x1 enumerateInput]代码生成参数:NUMOUTPUTS:2 OUTPUTFILENAME:'ClassificationCocModel'属性,方法

现在显示器包括二进制数解码也是。

生成代码

要生成C / C ++代码,您必须访问正确配置的C / C ++编译器。MATLAB编码器定位并使用支持的安装编译器。金宝app您可以使用梅克斯-设置查看和更改默认编译器。有关更多详细信息,请参阅更改默认编译器

为此生成代码预测更新ECOC分类模型的功能(MDL.)。

Generatecode(Configurer)
GenerateCode在输出文件夹中创建这些文件:'Initialize.m','predict.m','update.m'u','classificationcocmodel.mat'代码生成成功。

Generatecode.函数完成这些操作:

  • 生成生成代码所需的MATLAB文件,包括两个入口点函数预测.M.更新..为了预测更新函数MDL., 分别。

  • 创建名为MEX函数classificationcocmodel.对于两个入口点函数。

  • 创建MEX函数的代码Codegen \ Mex \ ClassificationCocmodel文件夹。

  • 将MEX函数复制到当前文件夹。

验证生成的代码

通过一些预测数据来验证是否是预测功能MDL.预测MEX函数中的函数返回相同的标签。要在具有多个入口点的MEX函数中调用一个入门点函数,请将函数名称指定为第一个输入参数。因为你指定了'解码'作为调谐输入参数来改变iSononstant.在生成代码之前的属性,您还需要在对MEX函数的调用中指定它,即使“失去重量”是默认值'解码'

[标签,dropsа] =预测(mdl,x,'二元乐''指数');[label_mex,delcolloss_mex] = classificationecocmodel('预测',X,'二元乐''指数''解码'“失去重量”);

相比标签label_mex.通过使用是平等的

isequal(标签,label_mex)
ans =.逻辑1

是平等的返回逻辑1(真的)如果所有输入相等。比较证实了预测功能MDL.预测MEX函数中的函数返回相同的标签。

opoloss_mex.可能包括与之相比的圆截止差异negl。在这种情况下,比较opoloss_mex.negl,允许小容差。

查找(ABS(Depostoss-Deportst_mex)> 1E-8)
ans = 0x1空双列向量

比较证实了neglopoloss_mex.在宽容范围内相同1E-8

培训模型和生成代码中的更新参数

使用不同的设置重新培训模型。指定'kernelscale'作为'汽车'这样,软件使用启发式程序选择适当的比例因子。

t_new = templatesvm('骨箱''高斯''标准化',真的,'kernelscale''汽车');RetrowingMDL = FitCecoc(X,Y,'学习者',t_new);

通过使用提取要更新的参数验证updateInpuls.。此功能检测到修改的模型参数returatedmdl.并验证修改的参数值是否满足参数的编码器属性。

params = validatedupdateInputs(Configurer,HetrowingMDL);

更新生成的代码中的参数。

classificeecocmodel('更新',params)

验证生成的代码

比较来自的输出预测功能returatedmdl.到了输出预测在更新的MEX函数中的功能。

[标签,occross] =预测(再次检索x,x,'二元乐''指数''解码''失败');[label_mex,delcolloss_mex] = classificationecocmodel('预测',X,'二元乐''指数''解码''失败');isequal(标签,label_mex)
ans =.逻辑1
查找(ABS(Depostoss-Deportst_mex)> 1E-8)
ans = 0x1空双列向量

比较证实了标签label_mex.是平等的neglopoloss_mex.在宽容范围内相同。

输入参数

全部收缩

编码器配置机器学习模型的编码器,指定为使用的编码器配置程序对象Learnercoderconfigurer

模型 编码器配置程序对象
多包分类的二进制决策树 classificationtreecoderconfigurer
单级和二进制分类的SVM classificationsvmcoderconfigurer
二进制分类的线性模型 ClassificeLcoderConfigurer.
用于SVM和线性型号的多键模型 classificationcoccoderconfigurer
回归的二进制决策树 回归的TreecoderConfigurer.
金宝app支持向量机(SVM)回归 回归vmcoderconfigurer
线性回归 RegentionLinearcoderConfigurer

构建类型,指定为'mex''DLL''lib'或者创建的代码生成配置对象Coder.config.(MATLAB编码器)

Generatecode.使用以下构建类型之一生成C / C ++代码。

  • 'mex'- 生成具有平台依赖扩展的MEX函数。MEX函数是一个C / C ++程序,可在命令窗口中执行。在生成用于部署的C / C ++库之前,生成MEX函数以验证生成的代码是否提供了正确的功能。

  • 'DLL'- 生成一个动态C / C ++库。

  • 'lib'- 生成静态C / C ++库。

  • 代码生成配置对象创建Coder.config.(MATLAB编码器)- 使用代码生成配置对象生成C / C ++代码以自定义代码生成选项。您可以使用该对象指定构建类型和其他配置选项。例如,修改GenerateReport.参数启用代码生成报告,并修改targetlang.参数生成C ++代码。默认值targetlang.参数是'C',生成C代码。

    cfg = coder.config('mex');cfg.generateReport = true;cfg.targetlang ='c ++';
    有关详细信息,请参阅-Config.选择Codegen.(MATLAB编码器)Coder.config.(MATLAB编码器), 和配置构建设置(MATLAB编码器)

Generatecode.在文件夹中生成C / C ++代码输出路径\ codegen \类型\outputfilename., 在哪里类型是由此指定的构建类型CFG.争论和outputfilename.文件名是否存储在outputfilename.财产配置程序

输出文件的文件夹路径Generatecode.,指定为字符向量或字符串数​​组。

指定的文件夹路径可以是当前文件夹路径的绝对路径或相对路径。

  • 路径不得包含空格,因为它们可以导致某些操作系统配置中的代码生成故障。

  • 路径也不能包含非7位ASCII字符,例如日语字符。

如果指定的文件夹不存在,则Generatecode.创建文件夹。

Generatecode.搜索四个MATLAB文件的指定文件夹:预测.M.更新..初始化..以及包括机器学习模型信息的垫文件。如果文件夹中不存在四个文件,则Generatecode.生成文件。否则,Generatecode.不会生成任何MATLAB文件。

Generatecode.在文件夹中生成C / C ++代码输出路径\ codegen \类型\outputfilename., 在哪里类型是由此指定的构建类型CFG.争论和outputfilename.文件名是否存储在outputfilename.财产配置程序

例子:'c:\ myfiles'

数据类型:char|细绳

限制

替代功能

  • 如果要修改MATLAB文件(预测.M.更新.., 和初始化..)根据您的代码生成工作流程,然后使用生成菲尔斯生成这些文件并使用Codegen.(MATLAB编码器)生成代码。

在R2018B中介绍