主要内容

generateCode

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

描述

训练机器学习模型后,使用learnerCoderConfigurer。修改配置程序的属性以指定代码生成选项。然后使用generateCode生成C/ c++代码预测使现代化机器学习模型的功能。生成C/C++代码需要MATLAB®编码员™

此流程图显示了使用编码器配置器的代码生成工作流。使用generateCode为突出显示的步骤。

例子

生成代码(配置生成一个MEX (MATLAB可执行文件)函数预测使现代化功能的机器学习模型使用配置.生成的MEX函数被命名outputFileName,它是存储在中的文件名OutputFileName的属性配置

要生成MEX函数,generateCode首先生成生成代码所需的MATLAB文件,并将其存储在当前文件夹中:

  • predict.m更新.m初始化.m- - - - - -predict.m更新.m是的入口点函数预测使现代化机器学习模型的函数,分别与这两个函数调用初始化.m

  • 包含机器学习模型信息的MAT文件-generateCode使用saveLearnerForCoder用于将机器学习模型信息保存在MAT文件中的函数,MAT文件的文件名存储在OutputFileName编码器配置器的属性。初始化.m使用以下命令加载保存的MAT文件:loadLearnerForCoder函数。

生成必要的MATLAB文件后,generateCode控件中创建MEX函数和MEX函数的代码codegen \墨西哥人\outputFileName文件夹并将MEX函数复制到当前文件夹。

例子

生成代码(配置cfg使用指定的构建类型生成C/ c++代码cfg

例子

生成代码(___,“OutputPath”,outputPath除了前面语法中的任何输入参数外,还指定输出文件的文件夹路径。generateCode在指定的文件夹中生成MATLAB文件outputPath并在文件夹中生成C/C++代码outputPath\编码基因\类型outputFileName哪里类型生成类型是否由cfg

例子

全部崩溃

训练一个机器学习模型,然后生成代码预测使现代化使用编码器配置器实现模型的功能。

加载卡斯莫尔数据集和训练支持向量机(SVM)回归模型。万博1manbetx

负载卡斯莫尔X=马力,重量;Y=每加仑;Mdl=fitrsvm(X,Y);

Mdl是一个RegressionSVM对象

控件创建一个编码器配置器RegressionSVM利用learnerCoderConfigurer.指定预测器数据X.的learnerCoderConfigurer函数使用输入X要配置的编码器属性,请执行以下操作:预测函数的输入。

configurer=learnercoderconfiguer(Mdl,X)
configurer=RegressionsVMCoderConfiguration with properties:Update Inputs:Alpha:[1x1 LearnerCoderInput]Sup万博1manbetxportVectors:[1x1 LearnerCoderInput]Scale:[1x1 LearnerCoderInput]Bias:[1x1 LearnerCoderInput]预测输入:X:[1x1 LearnerCoderInput]代码生成参数:Numoutput:1输出文件名:'RegressionSVMModel'属性、方法

配置是一个回归VMCoderConfigure对象,它是RegressionSVM对象

要生成C/C++代码,您必须能够访问正确配置的C/C++编译器。MATLAB Coder查找并使用受支持的已安装编译器。您可以使用万博1manbetx墨西哥-设置查看和更改默认编译器。有关详细信息,请参阅更改默认编译器

预测使现代化支持向量机回归模型(Mdl)的默认设置。

生成代码(配置器)
generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“RegressionSVMModel.mat”

generateCode函数完成这些动作:

  • 生成MATLAB文件所需的生成代码,包括两个入口点函数predict.m更新.m预测使现代化的功能Mdl,分别。

  • 创建一个名为回归模型对于两个入口点函数。

  • 控件中创建MEX函数的代码codegen\mex\RegressionSVMModel文件夹

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

显示的内容predict.m更新.m初始化.m通过使用类型函数。

类型predict.m
函数varargout=predict(X,varargin)%#codegen%由MATLAB自动生成,03-Oct-2020 19:22:33[varargout{1:nargout}]=initialize('predict',X,varargin{:});终止
类型更新.m
函数更新(varargin)%#codegen%由MATLAB自动生成,2020年10月3日19:22:33初始化('update',varargin{:});结束
类型初始化.m
函数[varargout]=initialize(command,varargin)%#codegen%由MATLAB自动生成,2020年10月3日19:22:33 coder.inline('always')持久模型如果isempty(model)model=loadLearnerForCoder('RegressionSVMModel.mat');end开关(command)case“update”%update结构字段:Alpha%SupportVectors%Scale%Bias model=update(model,varargin{:};case'predic万博1manbetxt'%predict Inputs:X X=varargin{1};if nargin==2[varargout{1:nargout}]=predict(model,X);else PVPairs=cell(1,nargin-2);对于i=1:nargin-2pvpairs{1,i}=varargin{i+1};end[varargout{1:nargout}=predict(model,X,pairs{});end

训练机器学习模型,并使用训练模型的编码器配置器生成代码。在生成代码时,使用代码生成配置对象指定构建类型和其他配置选项。

加载电离层数据集,训练二值支持向量机分类模型。万博1manbetx

负载电离层Mdl=fitcsvm(X,Y);

Mdl是一个ClassificationSVM对象

控件创建一个编码器配置器ClassificationSVM利用learnerCoderConfigurer.指定预测器数据X.的learnerCoderConfigurer函数使用输入X要配置的编码器属性,请执行以下操作:预测函数的输入。

configurer=learnercoderconfiguer(Mdl,X);

配置是一个分类VMCoderConfiguration对象,它是ClassificationSVM对象

使用创建代码生成配置对象coder.config(MATLAB编码器).指定“dll”生成动态库并指定GenerateReport财产作为符合事实的启用代码生成报告。

cfg = coder.config (“dll”);cfg。GenerateReport = true;

要生成C/C++代码,您必须能够访问正确配置的C/C++编译器。MATLAB Coder查找并使用受支持的已安装编译器。您可以使用万博1manbetx墨西哥-设置查看和更改默认编译器。有关详细信息,请参阅更改默认编译器

使用generateCode和配置对象cfg生成代码。另外,请指定输出文件夹路径。

生成代码(配置器、cfg、,“OutputPath”“测试路径”
指定的文件夹不存在。文件夹已创建。generateCode在输出文件夹中创建这些文件:“initialize.m”、“predict.m”、“update.m”、“ClassificationSVMModel.mat”代码生成成功:若要查看报告,请打开('codegen/dll/ClassificationSVMModel/html/report.mldatx')。

generateCode创建指定的文件夹。该函数还生成生成代码所需的MATLAB文件,并将它们存储在文件夹中。然后generateCode生成C代码testPath\codegen\dll\ClassificationSVMModel文件夹

列车A纠错输出代码(ECOC)使用SVM二进制学习器建模,并为模型创建编码器配置器。使用编码器配置器的属性指定ECOC模型参数的编码器属性。使用编码器配置器的目标函数生成预测新预测数据标签的C代码。然后使用不同设置重新训练模型,并更新在不重新生成代码的情况下删除生成代码中的参数。

列车模型

载入费雪的虹膜数据集。

负载鱼腥草X =量;Y =物种;

创建一个支持向量机二元学习模板,使用高斯核函数和标准化预测数据。

t = templateSVM (“内核函数”“高斯”“标准化”,对);

使用模板训练一个多类ECOC模型t

Mdl=FITCECOCC(X,Y,“学习者”,t);

Mdl是一个分类对象

创建编码器配置

控件创建一个编码器配置器分类利用learnerCoderConfigurer.指定预测器数据X.的learnerCoderConfigurer函数使用输入X要配置的编码器属性,请执行以下操作:预测函数的输入。此外,将输出的数量设置为2,以便生成的代码返回预测函数,它是预测的标号和负的平均二进制损耗。

configurer=learnerCoderConfigurer(Mdl,X,“NumOutputs”, 2)
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput]代码生成参数:NumOutputs: 2 OutputFileName:“ClassificationECOCModel”属性,方法

配置是一个分类代码配置器对象,它是分类对象显示屏显示了的可调输入参数预测使现代化X二元收入者先前的成本

指定参数的编码器属性

指定的编码器属性预测参数(预测器数据和名称-值对参数)“解码”“BinaryLoss”),使现代化参数(SVM学习器的支万博1manbetx持向量),以便您可以使用这些参数作为的输入参数预测使现代化在生成的代码中。

首先,指定的编码器属性X这样生成的代码就可以接受任意数量的观察结果。修改SizeVectorVariableDimensions属性。的SizeVector属性指定预测器数据大小的上限,以及VariableDimensions属性指定预测器数据的每个维度是具有可变大小还是固定大小。

configurer.X.SizeVector=[Inf 4];configurer.X.VariableDimensions=[true-false];

第一个维度的大小是观察数。在这种情况下,代码指定大小的上限为大小是可变的,也就是说X可以有任意数量的观察值。如果您在生成代码时不知道观察值的数量,则可以使用此规范。

第二个维度的大小是预测变量的数量。对于机器学习模型,该值必须是固定的。X包含4个预测器,因此SizeVector属性的第二个值必须为4VariableDimensions属性必须是

接下来,修改的编码器属性BinaryLoss解码使用“BinaryLoss”“解码”生成的代码中的名称-值对参数。显示BinaryLoss

配置。BinaryLoss
ans = EnumeratedInput与属性:值:'hinge' SelectedOption: ' built ' BuiltInOptions: {1x7 cell} IsConstant: 1可调性:0

若要在生成的代码中使用非默认值,必须在生成代码之前指定该值。指定价值属性BinaryLoss作为“指数型”

configurer.BinaryLoss.Value=“指数型”;配置。BinaryLoss
ans=EnumeratedInput,属性为:Value:'exponential'SelectedOption:'Buildin'内置选项:{1x7 cell}IsConstant:1可调性:1

当修改属性值时可调谐性(逻辑0),软件设置可调谐性符合事实的(逻辑1)。

的编码属性解码

配置。解码
ans = EnumeratedInput与属性:值:' lossweights ' SelectedOption: ' built ' BuiltInOptions: {' lossweights ' ' losssbased '} IsConstant: 1可调性:0

指定司仪属性解码作为以便使用。中的所有可用值建筑物在生成的代码中。

configurer.Decoding.IsConstant=false;configurer.Decoding
ans = EnumeratedInput的属性:值:[1x1 LearnerCoderInput] SelectedOption: 'NonConstant' BuiltInOptions: {' lossweightight ' ' losssbased '} IsConstant: 0可调性:1

软件改变了价值属性解码到一个LearnerCoderInput对象,以便两者都可以使用“迷失方向”“以损失为基础"作为“解码”。此外,软件设置SelectedOption“非恒定”可调谐性符合事实的

最后,修改的编码器属性万博1manbetx支持向量在里面二元收入者.显示的编码器属性万博1manbetx支持向量

configurer.BinaryLearners.万博1manbetxSupportVectors
ans = LearnerCoderInput带有属性:SizeVector: [54 4] VariableDimensions: [1 0] DataType: 'double'可调性:1

的默认值VariableDimensions(真假)因为每个学习者都有不同数量的支持向量。如果使用新数据或不同设置重新训练ECOC模型,SVM学习万博1manbetx器中的支持向量数量可能会有所不同。因此,增加支持向量数量的上限。

configurer.BinaryLearners.万博1manbetxSupportVectors.SizeVector=[150 4];
Alpha的SizeVector属性已被修改以满足配置约束。修改了SupportVectorLabels的Si万博1manbetxzeVector属性以满足配置约束。

的编码器属性万博1manbetx支持向量,然后软件修改的编码器属性阿尔法万博1manbetx支持向量标签以满足配置约束。如果修改一个参数的编码器属性需要随后更改其他相关参数以满足配置约束,则软件更改相关参数的编码器属性。

显示编码器配置器。

配置
配置= ClassificationECOCCoderConfigurer属性:更新输入:BinaryLearners:之前[1 x1 ClassificationSVMCoderConfigurer]: [1 x1 LearnerCoderInput]成本:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput] BinaryLoss: [1 x1 EnumeratedInput]解码:[1 x1 EnumeratedInput]代码生成参数:NumOutputs:2 OutputFileName: 'ClassificationECOCModel'属性,方法

现在显示包括BinaryLoss解码

生成代码

要生成C/C++代码,您必须能够访问正确配置的C/C++编译器。MATLAB Coder查找并使用受支持的已安装编译器。您可以使用万博1manbetx墨西哥-设置查看和更改默认编译器。有关详细信息,请参阅更改默认编译器

预测使现代化ECOC分类模型的功能(Mdl).

生成代码(配置器)
generateCode在输出文件夹中创建这些文件:“initialize.m”、“predict.m”、“update.m”、“ClassificationeComModel.mat”

generateCode函数完成这些动作:

  • 生成MATLAB文件所需的生成代码,包括两个入口点函数predict.m更新.m预测使现代化的功能Mdl,分别。

  • 创建一个名为ClassificationECOCModel对于两个入口点函数。

  • 控件中创建MEX函数的代码codegen \墨西哥人\ ClassificationECOCModel文件夹

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

验证生成的代码

传递一些预测数据以验证预测的函数Mdl预测函数中返回相同的标签。要在具有多个入口点的MEX函数中调用入口点函数,请将函数名指定为第一个输入参数。因为你指定的“解码”通过更改司仪属性在生成代码之前,您还需要在对MEX函数的调用中指定它,即使如此“迷失方向”默认值是“解码”

[标签,NegLoss] =预测(Mdl X,“BinaryLoss”“指数型”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,“BinaryLoss”“指数型”“解码”“迷失方向”);

比较标签标签利用isequal

label_mex isequal(标签)
ans=逻辑1

isequal返回逻辑1 (符合事实的),如果所有输入相等。比较证实了预测的函数Mdl预测函数中返回相同的标签。

NegLoss_mex可能包括与内格罗斯.在这种情况下,比较NegLoss_mex内格罗斯,允许较小的公差。

找到(abs (NegLoss-NegLoss_mex) > 1 e-8)
ans=0x1空双列向量

对比证实了内格罗斯NegLoss_mex在公差范围内是相等的1 e-8

在生成的代码中重新训练模型和更新参数

使用不同的设置重新训练模型。指定“KernelScale”作为“汽车”因此,软件使用启发式程序选择适当的比例因子。

t_new=模板SVM(“内核函数”“高斯”“标准化”符合事实的“KernelScale”“汽车”);retrainedMdl = fitcecoc (X, Y,“学习者”(t_new),;

使用提取要更新的参数验证更新输入.该函数检测修改后的模型参数再培训DMDL并验证修改后的参数值是否满足参数的编码器属性。

params=ValidateUpdateInputs(配置器、重新训练的DMDL);

更新生成代码中的参数。

分类模型(“更新”,参数)

验证生成的代码

比较来自预测的函数再培训DMDL的输出预测更新的MEX函数中的函数。

[标签,NegLoss] =预测(retrainedMdl X,“BinaryLoss”“指数型”“解码”“损失基础”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,“BinaryLoss”“指数型”“解码”“损失基础”);label_mex isequal(标签)
ans=逻辑1
找到(abs (NegLoss-NegLoss_mex) > 1 e-8)
ans=0x1空双列向量

对比证实了标签标签平等,平等,内格罗斯NegLoss_mex在公差范围内是相等的。

输入参数

全部崩溃

机器学习模型的编码器配置器,指定为通过使用learnerCoderConfigurer

模型 编码器配置器对象
用于多类分类的二叉决策树 ClassificationTreeCoderConfigurer
支持向量机用于一类和二值分类 分类VMCoderConfiguration
二元分类的线性模型 ClassificationLinearCoderConfigurer
支持向量机的多类模型和线性模型 分类代码配置器
回归二叉决策树 回归树配置器
万博1manbetx支持向量机回归 回归VMCoderConfigure
线性回归 RegressionLinearCoderConfigurer

生成类型,指定为墨西哥人的“dll”“自由”的代码生成配置对象coder.config(MATLAB编码器)

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

  • 墨西哥人的—生成一个具有平台相关扩展的MEX函数。MEX函数是一个C/ c++程序,可以从命令窗口执行。在生成用于部署的C/ c++库之前,生成一个MEX函数,以验证生成的代码提供了正确的功能。

  • “dll”-生成动态C/C++库。

  • “自由”-生成静态C/ c++库。

  • 所创建的代码生成配置对象coder.config(MATLAB编码器)-使用代码生成配置对象自定义代码生成选项生成C/ c++代码。您可以使用该对象指定构建类型和其他配置选项。例如,修改GenerateReport参数以启用代码生成报告,并修改塔吉特朗参数生成c++代码。的默认值塔吉特朗参数为“C”,生成C代码。

    cfg = coder.config (墨西哥人的);cfg。GenerateReport = true;cfg。TargetLang =“C++”
    有关详细信息,请参阅-配置选择编码基因(MATLAB编码器)coder.config(MATLAB编码器)配置生成设置(MATLAB编码器)

generateCode在文件夹中生成C/C++代码outputPath\编码基因\类型outputFileName,在那里类型是由指定的生成类型cfg论据和outputFileName文件名是否存储在OutputFileName的属性配置

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

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

  • 路径不能包含空格,因为在某些操作系统配置中,空格可能导致代码生成失败。

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

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

generateCode在指定文件夹中搜索四个MATLAB文件:predict.m更新.m初始化.m,以及包含机器学习模型信息的MAT文件。如果文件夹中不存在这四个文件,则generateCode生成文件。否则,generateCode不生成任何MATLAB文件。

generateCode在文件夹中生成C/C++代码outputPath\编码基因\类型outputFileName,在那里类型是由指定的生成类型cfg论据和outputFileName文件名是否存储在OutputFileName的属性配置

例子:“C: \ myfile”

数据类型:字符|一串

局限性

替代功能

  • 如果要修改MATLAB文件(predict.m更新.m初始化.m)根据您的代码生成工作流,然后使用generateFiles生成这些文件并使用编码基因(MATLAB编码器)生成代码。

介绍了R2018b