主要内容

generatecode.

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

描述

在训练一个机器学习模型之后,使用learnerCoderConfigurer.修改配置程序的属性以指定代码生成选项。然后使用generatecode.为此生成C / C ++代码预测更新机器学习模型的功能。生成C/ c++代码需要马铃薯草®编码器™

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

两个代码生成工作流:第一个在训练模型之后,第二个在重新训练相同的模型之后。第一个工作流,步骤1:创建一个编码器配置器。步骤2(突出显示):生成代码。步骤3:验证生成的代码。第二个工作流,步骤1:检查更新是否有效。是= >步骤2;否,执行第一个工作流的第一步。步骤2:更新生成代码中的模型参数。

例子

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

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

  • 预测..M.update.m,initialize.m- - - - - -预测..M.update.m入口点函数是什么预测更新机器学习模型的函数,分别与这两个函数调用initialize.m

  • 一个包含机器学习模型信息的mat文件generatecode.使用Savelarnerforcoder.函数将机器学习模型信息保存在mat -文件中,该文件的文件名存储在OutputFileName编码器配置程序的属性。initialize.m文件加载保存的mat -文件loadLearnerForCoder函数。

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

例子

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

例子

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

例子

全部折叠

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

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

负载carsmallX =(功率、重量);Y = MPG;Mdl = fitrsvm (X, Y);

Mdl是一个回归vm.对象。

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

X配置= learnerCoderConfigurer (Mdl)
Configurer = RegressionsVmcoderConFigurer具有属性:更新输入:Alpha:[1x1 LearnerCoderInput] SupportVectors:[1x1 Lear金宝appnercoderInput]缩放:[1x1 LearnercoderInput]偏置:[1x1 LearnercoderInput]预测输入:x:[1x1学习者划线算]代码生成参数:numoutputs:1 outputfilename:'回归vmmodel'属性,方法

配置是一个RegressionSVMCoderConfigurer对象的编码配置器回归vm.对象。

要生成C/ c++代码,您必须访问配置正确的C/ c++编译器。MATLAB编码器定位并使用一个受支持的、安装的编译器。金宝app您可以使用墨西哥人设置查看和更改默认编译器。有关详细信息,请参见改变默认的编译器

预测更新支持向量机回归模型(Mdl)的默认设置。

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

generatecode.函数完成这些操作:

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

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

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

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

显示的内容预测..M.update.m,initialize.m文件,使用类型函数。

类型预测..M.
function varargout = predict(X,varargin) %#codegen % Autogenerated by MATLAB, 01- 9 -2021 14:43:16 [varargout{1:nargout}] = initialize('predict',X,varargin{:});结束
类型update.m
函数更新(varargin)%#codegen%by matlab,01-sep-2021 14:43:16初始化('更新',varargin {:});结束
类型initialize.m
function [varargout] = initialize(command,varargin) %#codegen % Autogenerated by MATLAB, 01- 9 -2021 14:43:16 code .inline('always') persistent model if isempty(model) model = loadLearnerForCoder('RegressionSVMModel.mat');end switch(command) case 'update' % update struct fields: Alpha % 金宝appSupportVectors % Scale % Bias model = update(model,varargin{:});case 'predict' %预测输入:X X = varargin{1};if nargout == 2 [varargout{1:nargout}] = predict(model,X);else PVPairs = cell(1,nargin-2);for i = 1:nargin-2 PVPairs{1,i} = varargin{i+1};end [varargout{1:nargout}] = predict(model,X,PVPairs{:});结束结束结束

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

加载电离层数据集,训练二值支持向量机分类模型。金宝app

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

Mdl是一个ClassificationSVM对象。

为此创建一个编码器配置程序ClassificationSVM模型通过使用learnerCoderConfigurer.指定预测器数据X.的learnerCoderConfigurer函数使用输入X属性的编码器属性预测函数的输入。

配置= learnerCoderConfigurer (Mdl X);

配置是一个ClassificationSVMCoderConfigurer对象的编码配置器ClassificationSVM对象。

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

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

要生成C/ c++代码,您必须访问配置正确的C/ c++编译器。MATLAB编码器定位并使用一个受支持的、安装的编译器。金宝app您可以使用墨西哥人设置查看和更改默认编译器。有关详细信息,请参见改变默认的编译器

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

generateCode (cfg配置,“OutputPath”“testPath”
指定的文件夹不存在。文件夹已创建。generateCode在输出文件夹中创建这些文件:米”、“预测。米”、“更新。米”、“ClassificationSVMModel。代码生成成功:查看报告,打开('codegen/dll/ClassificationSVMModel/html/report.mldatx')

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

使用支持向量机二进制学习器训练纠错输出码(ECOC)模型,并为该模型创建编码器配置器。使用编码器配置器的属性来指定ECOC模型参数的编码器属性。使用编码器配置器的对象函数生成C代码,用于预测新的预测数据的标签。然后使用不同的设置重新训练模型,并在不重新生成代码的情况下更新生成代码中的参数。

火车模型

载入费雪的虹膜数据集。

负载fisheririsx = meas;y =物种;

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

t = templatesvm(“KernelFunction”“高斯”'标准化',真正的);

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

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

Mdl是一个ClassificationECOC对象。

创建编码器配置程序

为此创建一个编码器配置程序ClassificationECOC模型通过使用learnerCoderConfigurer.指定预测器数据X.的learnerCoderConfigurer函数使用输入X属性的编码器属性预测函数的输入。此外,将输出的数量设置为2,以便生成的代码返回预测函数,它是预测的标号和负的平均二进制损耗。

配置= learnerCoderConfigurer (Mdl X,“NumOutputs”2)
Configurer = ClassificationCocoderConfigurer具有属性:更新输入:BinaryLearners:[1x1 scresisificsvmcoderConfigurer]之前:[1x1学习者划线算术:[1x1 LearnercoderInput]预测输入:X:[1x1学习者划线算]代码生成参数:NumOutputs:2 OutputFileName:'ClassificationCocModel'属性,方法

配置是一个ClassificationECOCCoderConfigurer对象的编码配置器ClassificationECOC对象。的可调参数预测更新XBinaryLearners之前,成本

指定参数的编码器属性

的编码器属性预测参数(预测数据和名称 - 值对参数“解码”'binaryloss') 和更新参数(支持向量机学习器金宝app的支持向量),以便您可以使用这些参数作为的输入参数预测更新在生成的代码中。

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

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

第一个维度的大小是观测的次数。在本例中,代码指定大小的上限为并且大小是可变的,这意味着X可以有任意数量的观察结果。如果您在生成代码时不知道观察的数量,那么这个规范很方便。

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

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

配置。BinaryLoss
ANS = eNumerateDupput使用属性:value:'hinge'selectionOption:'内置'构建选项:{1x7 Cell} IsConstant:1可调性:0

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

configurer.BinaryLoss.Value =“指数”;配置。BinaryLoss
ans = EnumeratedInput与属性:值:'指数' SelectedOption: '内置' BuiltInOptions: {1x7 cell} IsConstant: 1可调性:1

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

的编码属性解码

配置。解码
ANS = eNumerateDupput与属性:value:'lockweighted'selectionOption:'内置'内置选项:{'lockweighted'的'丢失'} iSononstant:1可调性:0

指定IsConstant的属性解码作为以便使用。中的所有可用值BuiltInOptions在生成的代码中。

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

软件改变了价值的属性解码到一个LearnerCoderInput对象,以便两者都可以使用“lossweighted”“lossbased的价值“解码”.此外,软件设置选择选项“非常数的”可调谐性真正的

最后,修改的编码器属性金宝appSupportVectorsBinaryLearners.的编码属性金宝appSupportVectors

configurer.binarylearners.金宝appsupportVectors.
ANS = LearnerCoderInput具有属性:Sizevector:[54 4] Variabledimensions:[1 0]数据类型:'Double'可调性:1

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

configurer.BinaryLearners.金宝appSupportVectors.SizeVector = [150 4];
alpha的SizeVector属性已被修改为满足配置约束。SizeVector属性用于SupportVect金宝apporLabelabels已被修改为满足配置约束。

的编码器属性金宝appSupportVectors,然后软件修改了编码器属性Α金宝appSupportVectorLabels以满足配置约束。如果修改一个参数的编码器属性需要随后更改其他相关参数以满足配置约束,则软件更改相关参数的编码器属性。

显示编码器配置器。

配置
配置= 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编码器定位并使用一个受支持的、安装的编译器。金宝app您可以使用墨西哥人设置查看和更改默认编译器。有关详细信息,请参见改变默认的编译器

预测更新ECOC分类模式的功能(Mdl).

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

generatecode.函数完成这些操作:

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

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

  • 控件中创建MEX函数的代码Codegen \ MEX \ ClassificationCocModel文件夹中。

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

验证生成的代码

通过一些预测数据来验证是否预测的函数Mdl预测函数中返回相同的标签。要在具有多个入口点的MEX函数中调用一个入门点函数,请将函数名称指定为第一个输入参数。因为你指定了“解码”作为可调参数,通过更改IsConstant属性在生成代码之前,您还需要在对MEX函数的调用中指定它,即使如此“lossweighted”是默认值“解码”

[标签,NegLoss] =预测(Mdl X,'binaryloss'“指数”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,'binaryloss'“指数”“解码”“lossweighted”);

相比标签label_mex通过使用isequal

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

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

NegLoss_mex可能包括舍入差异与NegLoss.在这种情况下,比较NegLoss_mexNegLoss,允许有一个小的公差。

查找(ABS(Departoss-Deportoss_Mex)> 1E-8)
Ans = 0x1空双列向量

对比证实了NegLossNegLoss_mex在公差内是相等的吗1 e-8

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

使用不同的设置重新训练模型。指定'kernelscale'作为“汽车”因此,该软件采用启发式的方法选择合适的比例因子。

t_new = templateSVM (“KernelFunction”“高斯”'标准化',真的,'kernelscale'“汽车”);retrainedMdl = fitcecoc (X, Y,“学习者”,t_new);

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

params = validatedUpdateInputs(配置、retrainedMdl);

更新生成代码中的参数。

ClassificationECOCModel ('更新'params)

验证生成的代码

的输出比较预测的函数retrainedMdl到了输出预测函数。

[标签,occross] =预测(再次检索,x,'binaryloss'“指数”“解码”“lossbased”);[label_mex, NegLoss_mex] = ClassificationECOCModel (“预测”, X,'binaryloss'“指数”“解码”“lossbased”);isequal(标签,label_mex)
ans =逻辑1
查找(ABS(Departoss-Deportoss_Mex)> 1E-8)
Ans = 0x1空双列向量

对比证实了标签label_mex是相等的,NegLossNegLoss_mex在公差范围内是相等的。

输入参数

全部折叠

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

模型 编码器配置对象
用于多类分类的二叉决策树 ClassificationTreeCoderConfigurer
支持向量机用于一类和二值分类 ClassificationSVMCoderConfigurer
二元分类的线性模型 ClassificationLinearCoderConfigurer
支持向量机的多分类模型和线性模型 ClassificationECOCCoderConfigurer
二叉决策树的回归 RegressionTreeCoderConfigurer
金宝app支持向量机(SVM)回归 RegressionSVMCoderConfigurer
线性回归 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参数以启用代码生成报告,并修改TargetLang参数生成C ++代码。默认值TargetLang参数是“C”,生成C代码。

    cfg = coder.config (墨西哥人的);cfg。GenerateReport = true;cfg。TargetLang =“c++”
    具体操作请参见配置选择codegen(MATLAB编码器)coder.config(MATLAB编码器),配置构建设置(MATLAB编码器)

generatecode.在文件夹中生成C/ c++代码outputPath\ codegen \类型outputFileName, 在哪里类型生成类型是否由cfg参数,outputFileName文件名是否存储在OutputFileName的属性配置

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

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

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

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

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

generatecode.在指定的文件夹中搜索四个MATLAB文件:预测..M.update.minitialize.m,以及一个包含机器学习模型信息的mat文件。如果文件夹中不存在这四个文件,则generatecode.生成的文件。否则,generatecode.不生成任何MATLAB文件。

generatecode.在文件夹中生成C/ c++代码outputPath\ codegen \类型outputFileName, 在哪里类型生成类型是否由cfg参数,outputFileName文件名是否存储在OutputFileName的属性配置

例子:“C: \ myfile”

数据类型:char|字符串

限制

选择功能

  • 如果您想修改MATLAB文件(预测..M.update.m,initialize.m)根据您的代码生成工作流,然后使用generateFiles生成这些文件并使用codegen(MATLAB编码器)生成的代码。

介绍了R2018b