主要内容

loadLearnerForCoder

重建模型对象保存模型的代码生成

自从R2019b

描述

生成C / c++代码的对象的函数(包括机器学习模型预测,随机,knnsearch,rangesearch,isanomaly和增量学习函数),使用saveLearnerForCoder,loadLearnerForCoder,codegen(MATLAB编码器)。机器学习模型,训练后保存模型通过使用saveLearnerForCoder。定义一个入口点函数,通过使用加载模型loadLearnerForCoder并调用一个对象的功能。然后使用codegen或者是MATLAB®编码器™应用程序来生成C / c++代码。需要生成C / c++代码MATLAB编码器

函数支持单精度C / c++代码生成、金宝app使用saveLearnerForCoder,loadLearnerForCoder,codegen(MATLAB编码器);指定名称的参数“数据类型”、“单”当你打电话给loadLearnerForCoder函数。

这个流程图显示对象的代码生成工作流功能的机器学习模型。使用loadLearnerForCoder突出显示的步骤。

代码生成工作流对象功能的机器学习模型。步骤1:火车模型。第二步:保存模型。步骤3(强调):定义一个入口点函数。第四步:生成代码。第五步:验证生成的代码。

定点C / c++代码生成需要一个额外的步骤,定义了定点预测所需的变量的数据类型。创建一个定点数据类型结构通过使用生成的数据类型的功能generateLearnerDataTypeFcn,使用的结构作为输入参数loadLearnerForCoder在一个入口点函数。需要生成定点C / c++代码MATLAB编码器和定点设计师™。

这个流程图显示了定点代码生成的工作流预测机器学习模型的函数。使用loadLearnerForCoder突出显示的步骤。

定点代码生成工作流。步骤1:火车模型。第二步:保存模型。第三步:定义定点数据类型。步骤4(强调):定义一个入口点函数。第五步(可选):优化定点数据类型。第六步:生成代码。第七步:验证生成的代码。

例子

Mdl= loadLearnerForCoder (文件名)重新构建一个模型(Mdl)从模型存储在MATLAB格式化二进制文件(MAT-file)命名文件名。你必须创建文件名文件的使用saveLearnerForCoder

例子

Mdl= loadLearnerForCoder (文件名“数据类型”,“单”)重建一个单精度模型(Mdl)从模型存储在MATLAB格式化二进制文件(MAT-file)命名文件名

例子

Mdl= loadLearnerForCoder (文件名“数据类型”,T)返回一个定点存储在版本的模型文件名。结构T包含字段,指定定点使用所需的变量的数据类型预测的函数模型。创建T使用生成的函数generateLearnerDataTypeFcn

使用这种语法在一个入口点函数,和使用codegen生成定点入口点函数的代码。您可以使用该语法只有在生成代码。

例子

全部折叠

机器学习模型,训练后保存模型通过使用saveLearnerForCoder。定义一个入口点函数,通过使用加载模型loadLearnerForCoder并调用预测训练模型的函数。然后使用codegen(MATLAB编码器)来生成C / c++代码。

这个例子简要解释了代码生成工作流的预测机器学习模型在命令行。更多细节,请参阅机器学习模型的代码生成预测在命令行。您还可以使用MATLAB编码器应用。生成代码代码生成的预测使用MATLAB编码器应用机器学习模型获取详细信息。了解代码生成寻找最近的邻居使用最近邻搜索器模型,明白了最近邻搜索器的代码生成

火车模型

加载费雪的虹膜数据集。删除所有观察setosa虹膜数据XY只包含数据两类。

负载fisheriris第1 = ~ strcmp(物种,“setosa”);X =量(第1:);Y =物种(第1);

训练支持向量机(金宝appSVM)分类模型使用处理过的数据集。

Mdl = fitcsvm (X, Y);

Mdl是一个ClassificationSVM对象,它是一个线性支持向量机模型。线性支持向量机模型的预测系数提供足够的信息来预测新观察标签。把支持向量减少内存使用生成金宝app的代码。把支持向量通过线性支持金宝app向量机模型discard金宝appSupportVectors函数。

Mdl = discard金宝appSupportVectors (Mdl);

保存模型

将支持向量机分类模型保存到该文件SVMIris.mat通过使用saveLearnerForCoder

saveLearnerForCoder (Mdl“SVMIris”);

定义入口点函数

定义一个入口点函数命名classifyIris做以下几点:

  • 接受与列对应于虹膜花测量,并返回预测标签。

  • 加载一个训练支持向量机分类模型。

  • 预测使用加载标签分类模型的虹膜花测量。

函数标签= classifyIris (X)% # codegen% CLASSIFYIRIS虹膜物种使用支持向量机模型进行分类% CLASSIFYIRIS分类虹膜花测量X使用支持向量机SVMIris %模型文件。垫,然后返回类标签的标签。Mdl = loadLearnerForCoder (“SVMIris”);标签=预测(Mdl X);结束

添加% # codegen编译器指令(或编译指示)的入口点函数函数签名后,表明您打算为MATLAB算法生成代码。添加这个指令指示MATLAB代码分析器来帮助您诊断和解决违规,将导致错误在代码生成。

注意:如果单击按钮位于右上角的这个例子,在MATLAB®开设这个例子,然后用MATLAB®打开示例文件夹。这个文件夹包含的入口点函数文件。

生成代码

生成代码的入口点函数使用codegen(MATLAB编码器)。因为C和c++静态类型语言中,您必须确定所有变量的属性在编译时的入口点函数。通过X的价值arg游戏选项来指定所生成的代码必须接受一个输入相同的数据类型和数组大小为训练数据X。如果观测的数量在编译时是未知的,您还可以指定输入所适应的使用coder.typeof(MATLAB编码器)。有关详细信息,请参见为代码生成指定适应可变参数指定入口点函数输入的属性(MATLAB编码器)

codegenclassifyIrisarg游戏{X}
代码生成成功。

codegen生成墨西哥人的功能classifyIris_mex与平台相关的扩展。

验证生成的代码

比较标签分类使用预测,classifyIris,classifyIris_mex

label1 =预测(Mdl X);label2 = classifyIris (X);label3 = classifyIris_mex (X);verify_label = isequal (label1 label2 label3)
verify_label =逻辑1

isequal返回逻辑1(真正的),这意味着所有的输入都是平等的。标签分类所有的三种方法都是一样的。

机器学习模型,训练后保存模型通过使用saveLearnerForCoder。定义一个入口点函数,通过使用加载模型loadLearnerForCoder并调用预测训练模型的函数。然后使用codegen(MATLAB编码器)来生成C / c++代码。

这个例子简要解释了单精确预测代码生成工作流的机器学习模型在命令行。更多细节,请参阅机器学习模型的代码生成预测在命令行。您还可以使用MATLAB编码器应用。生成代码代码生成的预测使用MATLAB编码器应用机器学习模型获取详细信息。

火车模型

加载fisheriris数据集创建。X作为一个数字矩阵,包含四个花瓣测量150虹膜。创建Y作为一个单元阵列包含相应的特征向量的虹膜的物种。

负载fisheririsX =量;Y =物种;

朴素贝叶斯分类器训练使用预测X和类标签Y

Mdl = fitcnb (X, Y);

Mdl是一个培训ClassificationNaiveBayes分类器。

保存模型

将朴素贝叶斯分类模型保存到该文件naiveBayesIris.mat通过使用saveLearnerForCoder

saveLearnerForCoder (Mdl“naiveBayesIris”);

定义入口点函数

定义一个入口点函数命名classifyIrisSingle做以下几点:

  • 接受虹膜花测量与列对应于花瓣测量,并返回预测标签。

  • 加载一个训练有素的朴素贝叶斯分类模型。

  • 使用单精确加载分类模型预测标签虹膜花测量。

类型classifyIrisSingle.m
函数标签= classifyIrisSingle (X) % # codegen % classifyIrisSingle虹膜物种分类使用单精度天真% % classifyIrisSingle贝叶斯模型分类虹膜花使用%单精确测量X naiveBayesIris朴素贝叶斯模型文件。垫,然后%返回预测标签标签。Mdl = loadLearnerForCoder (“naiveBayesIris”、“数据类型”、“单”);标签=预测(Mdl X);结束

添加% # codegen编译器指令(或编译指示)的入口点函数函数签名后,表明您打算为MATLAB算法生成代码。添加这个指令指示MATLAB代码分析器来帮助您诊断和解决违规,将导致错误在代码生成。

注意:如果单击按钮位于右上角的这个例子,在MATLAB中打开这个例子,然后用MATLAB打开示例文件夹。这个文件夹包含的入口点函数文件。

生成代码

生成代码的入口点函数使用codegen(MATLAB编码器)。因为C和c++静态类型语言中,您必须确定所有变量的属性在编译时的入口点函数。通过X的价值arg游戏选项来指定所生成的代码必须接受一个输入相同的数据类型和数组大小为训练数据X。如果观测的数量在编译时是未知的,您还可以指定输入所适应的使用coder.typeof(MATLAB编码器)。有关详细信息,请参见为代码生成指定适应可变参数指定入口点函数输入的属性(MATLAB编码器)

Xpred =单(X);codegenclassifyIrisSinglearg游戏Xpred
代码生成成功。

codegen生成墨西哥人的功能classifyIrisSingle_mex与平台相关的扩展。

验证生成的代码

比较标签分类使用预测,classifyIrisSingle,classifyIrisSingle_mex

label1 =预测(Mdl X);label2 = classifyIrisSingle (X);label3 = classifyIrisSingle_mex (Xpred);verify_label = isequal (label1 label2 label3)
verify_label =逻辑1

isequal返回逻辑1(真正的),这意味着所有的输入都是平等的。标签分类所有的三种方法都是一样的。如果生成的墨西哥人的功能classifyIrisSingle_mex和功能预测不产生相同的分类结果,你可以计算错误分类的百分比标签。

sum (strcmp (label3 label1) = = 0) /元素个数(label1) * 100
ans = 0

机器学习模型,训练后保存模型saveLearnerForCoder。对于定点代码生成,指定所需的定点数据类型的变量预测使用生成的数据类型的功能generateLearnerDataTypeFcn。然后,定义一个入口点函数加载模型通过使用两个loadLearnerForCoder和指定的定点数据类型和调用预测的函数模型。使用codegen(MATLAB编码器)生成定点C / c++代码的入口点函数,然后验证生成的代码。

之前使用生成代码codegen,你可以使用buildInstrumentedMex(定点设计师)showInstrumentationResults(定点设计师)优化定点数据类型来提高定点代码的性能。记录最大和最小值的命名和内部变量预测使用buildInstrumentedMex。查看检测结果使用showInstrumentationResults;然后,根据结果,调整定点数据类型变量的属性。这个可选步骤的详细信息,请参阅定点代码生成SVM的预测

火车模型

加载电离层数据集和训练一个二进制SVM分类模型。

负载电离层Mdl = fitcsvm (X, Y,“KernelFunction”,“高斯”);

Mdl是一个ClassificationSVM模型。

保存模型

将支持向量机分类模型保存到该文件myMdl.mat通过使用saveLearnerForCoder

saveLearnerForCoder (Mdl“myMdl”);

定点数据类型定义

使用generateLearnerDataTypeFcn生成一个函数,定义了所需的定点数据类型的变量预测的支持向量机模型。

generateLearnerDataTypeFcn (“myMdl”,X)

generateLearnerDataTypeFcn生成myMdl_datatype函数。

创建一个结构T通过使用,定义了定点数据类型myMdl_datatype

T = myMdl_datatype (“固定”)
T =结构体字段:XDataType: [0 x0嵌入。fi] ScoreDataType: [0x0 embedded.fi] InnerProductDataType: [0x0 embedded.fi]

结构T包括的字段命名和运行所需的内部变量预测函数。每个字段包含一个定点对象,返回的fi(定点设计师)。定点对象指定定点数据类型属性,如单词长度和长度。例如,显示定点数据类型属性的预测数据。

T.XDataType
ans = [] DataTypeMode:定点:二进制扩展Signedness:签了字:16 FractionLength: 14 RoundingMethod:地板OverflowAction:包装ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128

定义入口点函数

定义一个入口点函数命名myFixedPointPredict做以下几点:

  • 接受的预测数据X和定点数据类型结构T

  • 加载一个定点的训练支持向量机分类模型用两个loadLearnerForCoder和结构T

  • 使用加载模型预测标签和分数。

函数(标签,分数)= myFixedPointPredict (X, T)% # codegenMdl = loadLearnerForCoder (“myMdl”,“数据类型”T);(标签,分数)=预测(Mdl X);结束

注意:如果单击按钮位于右上角的这个例子和开放的MATLAB®中的示例,然后用MATLAB打开示例文件夹。这个文件夹包含的入口点函数文件。

生成代码

XDataType场的结构T指定的定点数据类型预测数据。转换X中指定的类型T.XDataType通过使用(定点设计师)函数。

X_fx =投(X,“喜欢”,T.XDataType);

生成代码的入口点函数使用codegen。指定X_fx和持续的折叠T的入口点函数的输入参数。

codegenmyFixedPointPredictarg游戏{X_fx, coder.Constant (T)}
代码生成成功。

codegen生成墨西哥人的功能myFixedPointPredict_mex与平台相关的扩展。

验证生成的代码

通过预测数据预测myFixedPointPredict_mex比较输出。

(标签、分数)=预测(Mdl X);[labels_fx, scores_fx] = myFixedPointPredict_mex (X_fx T);

比较的输出预测myFixedPointPredict_mex

labels_fx verify_labels = isequal(标签)
verify_labels =逻辑1

isequal返回逻辑1(真正的),这意味着标签labels_fx是相等的。

如果你不满意的比较结果和想提高的精度生成的代码,您可以调整定点数据类型和重新生成代码。有关详细信息,请参见提示generateLearnerDataTypeFcn,数据类型的函数,定点代码生成SVM的预测

输入参数

全部折叠

MAT-file名称包含结构数组代表一个模型对象,指定为一个特征向量或字符串标量。你必须创建文件名文件使用saveLearnerForCoderloadLearnerForCoder可以存储在模型文件名文件在编译时。

的扩展文件名文件必须.mat。如果文件名没有扩展呢loadLearnerForCoder附加.mat

如果文件名不包括一个完整的路径,然后呢loadLearnerForCoder加载文件从当前文件夹。

下面的表显示了模型你可以节省使用saveLearnerForCoder每个模型是否支持定点和单精度代码生成。金宝app

例子:“Mdl”

数据类型:字符|字符串

定点数据类型,指定为一个结构。这个论点是定点C / c++代码生成。

创建T使用一个函数生成的generateLearnerDataTypeFcn。关于生成的功能和结构的细节T,请参阅generateLearnerDataTypeFcn数据类型的函数

你可以使用这个参数模型文件名文件是一个支持向量机模型、决策树模型和决策树的一个整体。

数据类型:结构体

限制

  • MdlCompactLinearModel- - - - - -假设你训练一个线性模型通过使用fitlm并指定“RobustOpts”作为一个结构和一个匿名函数处理RobustWgtFun字段中,使用saveLearnerForCoder保存模型,然后使用loadLearnerForCoder加载模型。在这种情况下,loadLearnerForCoder不能恢复健壮的属性到MATLAB的工作区中。然而,loadLearnerForCoder可以加载模型在一个入口点函数在编译时代码生成。

  • MdlCompactClassificationSVMCompactClassificationECOC- - - - - -如果你使用saveLearnerForCoder保存模型具备预测后验概率,和使用loadLearnerForCoder加载模型loadLearnerForCoder不能恢复ScoreTransform属性到MATLAB的工作区中。然而,loadLearnerForCoder可以加载模型,包括ScoreTransform属性,在一个入口点函数在编译时代码生成。

提示

  • 为单精度代码生成高斯过程回归(GPR)模型和支持向量机(SVM)模型,使用标准化的数据通过指定金宝app“标准化”,真的当你训练模型。

算法

saveLearnerForCoder准备一个机器学习模型(Mdl代码生成。该函数删除一些不必要的属性。

  • 对于一个拥有相应的紧凑的模型模型,saveLearnerForCoder应用适当的函数紧凑的函数模型之前拯救它。

  • 了一个模型,没有相应的契约模型,如ClassificationKNN,ClassificationKernel,ClassificationLinear,RegressionKernel,RegressionLinear,ExhaustiveSearcher,KDTreeSearcher,IsolationForest,saveLearnerForCoder函数删除属性如hyperparameter优化属性,培训解决信息等等。

loadLearnerForCoder负荷模型所救saveLearnerForCoder

选择功能

扩展功能

版本历史

介绍了R2019b