主要内容

generateCode

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

自从R2018b

描述

训练后机器学习模型,创建一个编码器配置模型通过使用learnerCoderConfigurer。修改配置的属性来指定代码生成选项。然后使用generateCode生成C / c++代码预测更新机器学习模型的功能。需要生成C / c++代码MATLAB®编码器™

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

两个代码生成工作流:第一个模型训练后,第二次再培训后相同的模型。第一个工作流程,步骤1:创建一个编码器配置。步骤2(强调):生成代码。第三步:验证生成的代码。第二个工作流,步骤1:检查是否更新是有效的。如果是的,去步骤2;如果没有,先去的第一步工作流程。步骤2:在生成的代码更新模型参数。

例子

generateCode (配置)MATLAB生成一个墨西哥人(可执行的)的函数预测更新通过使用机器学习模型的函数配置。生成的墨西哥人函数命名outputFileName中存储的文件名OutputFileName的属性配置

生成一个墨西哥人的功能,generateCode首先需要生成以下MATLAB文件生成代码并将它们存储在当前文件夹:

  • predict.m,update.m,initialize.m- - - - - -predict.mupdate.m的入口点函数吗预测更新机器学习模型的功能,分别,这两个函数调用initialize.m

  • 信息——MAT-file,包括机器学习模型generateCode使用saveLearnerForCoderMAT-file函数保存机器学习模型信息的文件名存储在OutputFileName一个编码人员配置的属性。initialize.m加载保存MAT-file使用loadLearnerForCoder函数。

生成必要的MATLAB文件后,generateCode创建了墨西哥人的功能和墨西哥人功能的代码codegen \墨西哥人\outputFileName文件夹,将墨西哥人功能复制到当前文件夹。

例子

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是一个RegressionSVM对象,它是一个线性支持向量机模型。预测系数的线性支持向量机模型提供足够的信息来预测新观察反应去除支持向量减少内存使用量在生成的代码中。金宝app把支持向量通过线性支持金宝app向量机模型discard金宝appSupportVectors函数。

Mdl = discard金宝appSupportVectors (Mdl);

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

X配置= learnerCoderConfigurer (Mdl)
配置属性= RegressionSVMCoderConfigurer:更新输入:β:[1 x1 LearnerCoderInput]: [1 x1 LearnerCoderInput]偏见:[1 x1 LearnerCoderInput]预测输入:X: [1 x1 LearnerCoderInput]代码生成参数:NumOutputs: 1 OutputFileName:“RegressionSVMModel”属性,方法

配置是一个RegressionSVMCoderConfigurer对象,该对象是一个编码器的配置RegressionSVM对象。

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

生成的代码预测更新函数的支持向量机回归模型(Mdl用默认设置)。

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

generateCode函数完成这些操作:

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

  • 创建一个墨西哥人函数命名RegressionSVMModel两个入口点函数。

  • 创建中的墨西哥人功能的代码codegen \墨西哥人\ RegressionSVMModel文件夹中。

  • 墨西哥人功能复制到当前文件夹。

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

类型predict.m
变长度输入宗量函数varargout =预测(X) % # codegen %自动生成通过MATLAB, 03 - mar - 2023 10:52:31 [varargout {1: nargout}] =初始化(“预测”,X,变长度输入宗量{:});结束
类型update.m
函数更新(变长度输入宗量)% # codegen %自动生成通过MATLAB, 03 - mar - 2023 10:52:31初始化(“更新”,变长度输入宗量{:});结束
类型initialize.m
函数[varargout] =初始化(指挥、变长度输入宗量)% # codegen %自动生成通过MATLAB, 03 - mar - 2023 10:52:31 coder.inline(“总是”)持久模型如果isempty(模型)模型= loadLearnerForCoder (“RegressionSVMModel.mat”);终端开关(命令)案例'更新' %更新结构体字段:β%比例%偏差模型=更新(模型、变长度输入宗量{:});例“预测”%预测输入:X X =变长度输入宗量{1};如果输入参数个数= = 2 (varargout {1: nargout}] =预测(模型中,X);其他PVPairs =细胞(1、nargin-2);i = 1: nargin-2 PVPairs{1,} =变长度输入宗量{i + 1};结束(varargout {1: nargout}] =预测(模型、X PVPairs {:});结束结束结束

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

加载电离层数据集。

负载电离层

火车一个二进制支持向量机(SV金宝appM)分类模型,使用高斯核函数和一个自动内核规模。

Mdl = fitcsvm (X, Y,“KernelFunction”,“高斯”,“KernelScale”,“汽车”);

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文件夹中。

火车一个纠错输出编码二进制学习者使用SVM (ECOC)模型,并创建一个编码器的配置模型。使用编码器配置的属性来指定编码器ECOC模型参数的属性。使用编码器配置的目标函数来生成C代码,预测新的预测数据标签。使用不同的设置,然后重新训练模型和更新参数生成的代码没有重新生成代码。

火车模型

加载费雪的虹膜数据集。

负载fisheririsX =量;Y =物种;

创建一个二进制学习者模板使用高斯核函数的SVM和标准化预测数据。

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

使用模板训练多级ECOC模型t

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

Mdl是一个ClassificationECOC对象。

创建编码器配置

创建一个编码器的配置ClassificationECOC模型通过使用learnerCoderConfigurer。指定的预测数据X。的learnerCoderConfigurer函数使用的输入X配置的编码属性预测函数的输入。同时,设置输出的数量2,这样生成的代码返回的前两个输出预测函数,它是预测标签和否定平均二进制损失。

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

配置是一个ClassificationECOCCoderConfigurer对象,该对象是一个编码器的配置ClassificationECOC对象。显示器显示的可调输入参数预测更新:X,BinaryLearners,之前,成本

指定编码的属性参数

指定的编码属性预测参数(预测数据和参数名称-值对“解码”“BinaryLoss”),更新参数的SVM(支持向量金宝app学习者),这样您就可以使用这些参数作为输入参数预测更新在生成的代码。

首先,指定的编码属性X这样生成的代码接受任何数量的观察。修改SizeVectorVariableDimensions属性。的SizeVector属性指定的上界预测数据大小,和VariableDimensions属性指定每个维度的预测数据是否有一个变量大小或固定大小。

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

第一个维度的大小是观测的数量。在这种情况下,代码指定大小的上限和大小是可变的,这意味着X可以拥有任意数量的观察。这个规范是方便如果你不知道观察当生成代码的数量。

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

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

configurer.BinaryLoss
ans = EnumeratedInput属性:价值:“枢纽”SelectedOption:“内置”BuiltInOptions:{“汉明”“线性”“二次”“指数”“binodeviance”“枢纽”的分对数}IsConstant: 1可调谐性:0

使用默认的值在生成的代码中,您必须指定的值在生成代码。指定价值的属性BinaryLoss作为“指数”

configurer.BinaryLoss。值=“指数”;configurer.BinaryLoss
ans = EnumeratedInput属性:价值:“指数”SelectedOption:“内置”BuiltInOptions:{“汉明”“线性”“二次”“指数”“binodeviance”“枢纽”的分对数}IsConstant: 1可调谐性:1

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

显示的编码属性解码

configurer.Decoding
ans = EnumeratedInput属性:价值:“lossweighted”SelectedOption:“内置”BuiltInOptions: {“lossweighted”“lossbased”} IsConstant: 1可调谐性:0

指定IsConstant的属性解码作为因此,您可以使用所有可用的值BuiltInOptions在生成的代码。

configurer.Decoding。IsConstant = false;configurer.Decoding
ans = EnumeratedInput属性:价值:[1 x1 LearnerCoderInput] SelectedOption:“非常数的”BuiltInOptions: {“lossweighted”“lossbased”} IsConstant: 0可调谐性:1

软件变更价值的属性解码到一个LearnerCoderInput对象,这样你可以同时使用“lossweighted”“lossbased”的价值“解码”。此外,软件设置SelectedOption“非常数的”可调谐性真正的

最后,修改编码的属性金宝appSupportVectorsBinaryLearners。显示的编码属性金宝appSupportVectors

configurer.BinaryLearners.金宝appSupportVectors
ans = LearnerCoderInput属性:SizeVector: [54 4] VariableDimensions:[1 0]数据类型:“双”可调谐性:1

的默认值VariableDimensions(真假)因为每个学习者都有不同数量的支持向量。金宝app如果你再培训ECOC模型使用新数据或不同的设置,支持向量的个数在SVM学习者可以有所不同。金宝app因此,提高支持向量的个数的上界。金宝app

configurer.BinaryLearners.金宝appSupportVectors。SizeVector = 150 [4];
αSizeVector属性已被修改,以满足配置约束。SizeVector属性SupportVector金宝appLabels已被修改,以满足配置约束。

如果你修改的编码属性金宝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文件生成代码,包括两个入口点函数predict.mupdate.m预测更新的功能Mdl,分别。

  • 创建一个墨西哥人函数命名ClassificationECOCModel两个入口点函数。

  • 创建中的墨西哥人功能的代码codegen \墨西哥人\ ClassificationECOCModel文件夹中。

  • 墨西哥人功能复制到当前文件夹。

验证生成的代码

一些预测数据来验证是否通过预测的函数Mdl预测墨西哥人的函数返回相同的标签。在墨西哥人叫一个入口点函数有多个入口点函数,函数名指定为第一个输入参数。因为你指定的“解码”作为一个可调输入参数通过改变IsConstant属性生成代码之前,您还需要指定调用墨西哥人的功能,尽管“lossweighted”的默认值吗“解码”

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

比较标签label_mex通过使用isequal

label_mex isequal(标签)
ans =逻辑1

isequal返回逻辑1 (真正的如果所有的输入都是平等的。确认进行了比较预测的函数Mdl预测墨西哥人的函数返回相同的标签。

NegLoss_mex可能包括舍入差异比较NegLoss。在这种情况下,比较NegLoss_mexNegLoss,允许一个小宽容。

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

比较证实,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的输出预测功能更新的墨西哥人的功能。

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

比较证实,标签label_mex是相等的,NegLossNegLoss_mex宽容是相等的。

输入参数

全部折叠

编码器配置的机器学习模型,指定为一个编码器通过使用创建的配置对象learnerCoderConfigurer

模型 编码器配置对象
二叉决策树的多类分类 ClassificationTreeCoderConfigurer
看到下面成了和二进制分类的支持向量机 ClassificationSVMCoderConfigurer
线性模型的二进制分类 ClassificationLinearCoderConfigurer
多类支持向量机模型和线性模型 ClassificationECOCCoderConfigurer
二叉决策树的回归 RegressionTreeCoderConfigurer
金宝app支持向量机(SVM)回归 RegressionSVMCoderConfigurer
线性回归 RegressionLinearCoderConfigurer

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

generateCode生成C / c++代码使用的构建类型。

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

  • “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,指定为一个特征向量数组或字符串。

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

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

  • 路径也不能包含non-7-bit ASCII字符,如日本的角色。

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

generateCode搜索指定的文件夹四MATLAB文件:predict.m,update.m,initialize.m,MAT-file包括机器学习模型信息。如果这四个文件不存在的文件夹,然后generateCode生成的文件。否则,generateCode不产生任何MATLAB文件。

generateCode生成C / c++代码的文件夹outputPath\ codegen \类型\outputFileName,在那里类型建立指定的类型吗cfg参数,outputFileName中存储的文件名吗OutputFileName的属性配置

例子:“C: \ myfile”

数据类型:字符|字符串

限制

选择功能

  • 如果你想修改MATLAB文件(predict.m,update.m,initialize.m根据您的代码生成)工作流,那么使用generateFiles这些文件生成和使用codegen(MATLAB编码器)生成的代码。

版本历史

介绍了R2018b