主要内容

loadlearnerforcoder.

从保存的模型中重建模型对象以便生成代码

描述

为机器学习模型的对象功能生成C / C ++代码(包括预测随机knnsearchrangesearch.,增量学习功能),使用Savelarnerforcoder.loadlearnerforcoder.,和Codegen.(MATLAB编码器).在培训机器学习模型后,通过使用保存模型Savelarnerforcoder..定义通过使用加载模型的入口点函数loadlearnerforcoder.并调用一个对象函数。然后使用Codegen.或者马铃薯®编码器™应用程序生成C / C ++代码。生成C / C ++代码需要Matlab编码器

对于支持单精度C/ c++代码生成的函金宝app数,请使用Savelarnerforcoder.loadlearnerforcoder.,和Codegen.(MATLAB编码器);指定名称值参数'dataType','single'当你呼叫loadlearnerforcoder.函数。

该流程图显示了机器学习模型的对象功能的代码生成工作流程。使用loadlearnerforcoder.为突出显示的步骤。

定点C / C ++代码生成需要一个附加步骤,该步骤定义预测所需的变量的定点数据类型。使用由生成的数据类型功能创建固定点数据类型结构generatelearnerdatatypefcn.,并使用该结构作为输入参数loadlearnerforcoder.在入口点函数中。生成定点C/ c++代码需要Matlab编码器和固定点设计器™。

此流程图显示了固定点代码生成工作流程预测机器学习模型的功能。使用loadlearnerforcoder.为突出显示的步骤。

例子

MDL.= loadlearnerforcoder(文件名重建分类模型、回归模型或最近邻搜索器(MDL.)从存储在Matlab格式化的二进制文件(MAT文件)中的模型中命名文件名.您必须创建文件名文件使用Savelarnerforcoder.

例子

MDL.= loadlearnerforcoder(文件名“数据类型”,“单”)重建单精度分类或回归模型(MDL.)从存储在Matlab格式化的二进制文件(MAT文件)中的模型中命名文件名

例子

MDL.= loadlearnerforcoder(文件名,'数据类型',T返回存储在的模型的固定点版本文件名.结构T包含指定使用该变量所需的变量的固定点数据类型的字段预测模型的功能。创造T生成的函数generatelearnerdatatypefcn.

在入口点函数中使用此语法,并使用Codegen.为入学点函数生成定点代码。您只能在生成代码时使用此语法。

例子

崩溃

在培训机器学习模型后,通过使用保存模型Savelarnerforcoder..定义通过使用加载模型的入口点函数loadlearnerforcoder.并致电预测训练模型的函数。然后使用Codegen.(MATLAB编码器)要生成C / C ++代码。

此示例简要介绍了用于预测命令行的机器学习模型的代码生成工作流程。有关更多详细信息,请参阅命令行中计算机学习模型预测的代码生成.您还可以使用MATLAB编码器应用程序生成代码。看使用MATLAB编码器应用程序预测机器学习模型的代码生成获取详细信息。要了解使用最近的邻居搜索器模型查找最近邻居的代码生成,请参阅最近邻搜索的代码生成

火车模型

装载Fisher的Iris数据集。删除所有观察到的setosa虹膜数据XY仅包含两个类的数据。

负载渔民inds =〜strcmp(物种,'setosa');x = meas(inds,:);Y =物种(INDS);

使用已加工的数据金宝app集列车支持向量机(SVM)分类模型。

mdl = fitcsvm(x,y);

MDL.是A.分类VM.模型。

保存模型

将SVM分类模型保存到文件中svmiris.mat通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,'svmiris');

定义入口点函数

定义命名的入口点函数classifyiris.它的作用如下:

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

  • 加载训练有素的SVM分类模型。

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

类型Classifyiris.m.%显示classifyiris.m文件的内容
函数标签= classifyiris(x)%#codegen%classifyiris使用svm model%classifyiris使用文件svmiris.mat中的svm%模型在x中分类x的虹膜花测量值,然后返回标签中的类标签。mdl = loadlearnerforcoder('svmiris');标签=预测(MDL,x);结尾

添加%#codegen.编译器指令(或Pragma)到函数签名后的入门点函数,表示您打算为Matlab算法生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复将在代码生成中导致错误的违规。

笔记:如果单击此示例的右上角部分中的按钮并在MATLAB®中打开此示例,则Matlab®将打开示例文件夹。此文件夹包含入口点函数文件。

生成代码

生成用于入口点函数的代码Codegen.(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。通过X作为价值arg游戏选项指定生成的代码必须接受具有与培训数据相同数据类型和数组大小的输入X.如果观察次数在编译时未知,则还可以使用的方式将输入指定为可变大小Coder.typeof.(MATLAB编码器).有关详细信息,请参见指定代码生成的变量大小参数指定入口点功能输入的属性(MATLAB编码器)

Codegen.classifyiris.arg游戏{X}
代码成功。

Codegen.生成MEX函数classifyiris_mex.具有平台依赖的扩展。

验证生成的代码

比较使用的标签预测classifyiris.,和classifyiris_mex.

label1 =预测(Mdl X);label2 = classifyiris(x);label3 = classifyiris_mex(x);verify_label = isequal (label1 label2 label3)
验证_Label =.逻辑1

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

在培训机器学习模型后,通过使用保存模型Savelarnerforcoder..定义通过使用加载模型的入口点函数loadlearnerforcoder.并致电预测训练模型的函数。然后使用Codegen.(MATLAB编码器)要生成C / C ++代码。

此示例简要介绍了用于预测命令行的机器学习模型的单精度代码生成工作流程。有关更多详细信息,请参阅命令行中计算机学习模型预测的代码生成.您还可以使用MATLAB编码器应用程序生成代码。看使用MATLAB编码器应用程序预测机器学习模型的代码生成获取详细信息。

火车模型

加载渔民数据集。创造X作为一个用于150虹膜的四个花瓣测量的数字矩阵。创造Y作为包含相应的IRIS物种的字符向量的单元阵列。

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

使用预测器训练一个天真的贝叶斯分类器X和班级标签Y

mdl = fitcnb(x,y);

MDL.是训练有素的ClassificationniveBayes.分类器。

保存模型

将Naive Bayes分类模型保存到文件中NaiveBayesiris.mat.通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,'naivebayesiris');

定义入口点函数

定义命名的入口点函数classififirissingle它的作用如下:

  • 接受鸢尾花的尺寸和花瓣尺寸对应的列,并返回预测的标签。

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

  • 使用用于虹膜花测量的单精度加载​​的分类模型来预测标签。

类型classifyirissingle.m.
函数标签= classifirissingle(x)%#codegen%classifyirsingle使用单精度天真的贝叶斯型号%classifyirissingle对x中的虹膜花卉测量分类在文件naivebayesiris.mat中的%单精度天真贝叶斯模型,以及%然后返回标签中的预测标签。mdl = loadlearnerforcoder('naivebayesiris','datatype','single');标签=预测(MDL,x);结尾

添加%#codegen.编译器指令(或Pragma)到函数签名后的入门点函数,表示您打算为Matlab算法生成代码。添加此指令指示MATLAB代码分析仪帮助您诊断和修复将在代码生成中导致错误的违规。

笔记:如果单击此示例的上右侧部分中的按钮并在MATLAB中打开此示例,则MATLAB将打开示例文件夹。此文件夹包含入口点函数文件。

生成代码

生成用于入口点函数的代码Codegen.(MATLAB编码器).因为C和c++都是静态类型语言,所以必须在编译时确定入口点函数中所有变量的属性。通过X作为价值arg游戏选项指定生成的代码必须接受具有与培训数据相同数据类型和数组大小的输入X.如果观察次数在编译时未知,则还可以使用的方式将输入指定为可变大小Coder.typeof.(MATLAB编码器).有关详细信息,请参见指定代码生成的变量大小参数指定入口点功能输入的属性(MATLAB编码器)

Xpred =单(x);Codegen.classififirissinglearg游戏Xpred.
代码成功。

Codegen.生成MEX函数classificirissingle_mex.具有平台依赖的扩展。

验证生成的代码

比较使用的标签预测classififirissingle,和classificirissingle_mex.

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

isequal返回逻辑1 (true),这意味着所有输入都是相等的。三种方法分类的标签都是一样的。如果生成的MEX函数classificirissingle_mex.和功能预测不要产生相同的分类结果,您可以计算错误分类标签的百分比。

和(strcmp(标签3,label1)== 0)/ numel(label1)* 100
ans = 0.

培训机器学习模型后,使用模型使用Savelarnerforcoder..对于固定点代码生成,通过使用由生成的数据类型函数指定预测所需的变量的定点数据类型generatelearnerdatatypefcn..然后,定义一个入口点函数,通过使用这两个函数来加载模型loadlearnerforcoder.指定的定点数据类型,并调用预测模型的功能。使用Codegen.(MATLAB编码器)要为入口点函数生成固定点C / C ++代码,然后验证生成的代码。

在使用代码之前使用Codegen.,你可以使用buildInstrumentedMex(定点设计师)showinstumastation.cresults.(定点设计师)优化定点数据类型以提高定点代码的性能。通过使用,记录命名变量和内部变量的最小值和最大值buildInstrumentedMex.使用仪器使用showinstumastation.cresults.;然后,根据结果,调整变量的定点数据类型属性。有关此可选步骤的详细信息,请参阅用于预测SVM的固定点代码生成

火车模型

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

负载电离层mdl = fitcsvm(x,y,'骨箱''高斯');

MDL.是A.分类VM.模型。

保存模型

将SVM分类模型保存到文件中mymdl.mat通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,“myMdl”);

定义固定点数据类型

使用generatelearnerdatatypefcn.生成定义预测SVM模型所需的变量的定点数据类型的函数。

generatelearnerdatatypefcn(“myMdl”,X)

generatelearnerdatatypefcn.生成myMdl_datatype函数。

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

T = myMdl_datatype ('固定的'
t =结构与字段:XDatatype:[0x0 Embedded.fi] scoringatatype:[0x0嵌入式.fi] InnerProductDattype:[0x0嵌入式.FI]

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

t.xdatatype.
ANS = []数据批次:二进制点缩放签名:签名WordLength:16 FractionLength:14 roundingmethod:地板溢出:包装ProductMode:FullPrecision MaxProductwordLength:128序列:FullPrecision MaxSumwordLength:128

定义入口点函数

定义命名的入口点函数myfixedpointpredict它的作用如下:

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

  • 使用两者加载训练的SVM分类模型的定点版本loadlearnerforcoder.和结构T

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

类型myfixedpointpredict.m.%显示myfixedpointpredict.m文件的内容
功能[标签,分数] = myfixedpointpredict(x,t)%#codegen mdl = loadlearnerforcoder('mymdl','datatype',t);[标签,得分] =预测(MDL,x);结尾

笔记:如果单击该示例的右上角的按钮并在MATLAB®中打开示例,则MATLAB将打开示例文件夹。此文件夹包含入口点函数文件。

生成代码

XDataType结构领域T指定预测器数据的定点数据类型。兑换X中指定的类型t.xdatatype.通过使用(定点设计师)函数。

x_fx = cast(x,'像',t.xdatatype);

生成用于入口点函数的代码Codegen..指定X_FX.和持续的折叠T作为入口点函数的输入参数。

Codegen.myfixedpointpredictarg游戏{x_fx,coder.constant(t)}
代码成功。

Codegen.生成MEX函数myfixedpointpredict_mex.具有平台依赖的扩展。

验证生成的代码

将预测数据传递给预测myfixedpointpredict_mex.比较输出。

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

比较输出预测myfixedpointpredict_mex.

labels_fx verify_labels = isequal(标签)
验证_labels =.逻辑1

isequal返回逻辑1(true),这意味着标签Labels_fx.是相等的。如果标签不相等,可按如下方法计算标签分类错误的百分比。

sum (strcmp (labels_fx、标签)= = 0)/元素个数(labels_fx) * 100
ans = 0.

找到分数输出之间的相对差异的最大值。

Reldiff_scores = max(abs(scors_fx.double(:,1)-scores(:,1))./ scores(:,1)))
Reldiff_scores = 0.0055.

如果您对比较结果不满意并希望提高生成的代码的精度,则可以调整固定点数据类型并重新生成代码。有关详细信息,请参见提示in.generatelearnerdatatypefcn.数据类型功能,和用于预测SVM的固定点代码生成

输入参数

崩溃

mat文件的名称,该文件包含表示模型对象的结构数组,指定为字符向量或字符串标量。您必须创建文件名文件使用Savelarnerforcoder.loadlearnerforcoder.重建存储在存储的模型文件名文件在编译时。

延伸的文件名文件必须是。垫.如果文件名没有延伸,那么loadlearnerforcoder.附加。垫

如果文件名不包括一个完整的路径,那么loadlearnerforcoder.从当前文件夹加载文件。

这些表显示您可以使用的型号Savelarnerforcoder.以及每个模型是否支持固定点和单精度代码生成。金宝app

例子:'mdl'

数据类型:char|细绳

固定点数据类型,指定为结构。此参数用于固定点C / C ++代码生成。

创造T使用由此生成的函数generatelearnerdatatypefcn..有关生成的功能和结构的详细信息T,请参阅generatelearnerdatatypefcn.数据类型功能

您可以在模型中使用此参数文件名文件是SVM模型,决策树模型和决策树的集合。

数据类型:结构体

输出参数

崩溃

机器学习模型,作为其中一个模型对象之一:

提示

  • 对于Gaussian进程回归(GPR)模型的单精度代码生成,通过使用创建模型FITRGP(X,Y,'标准化',1)

算法

Savelarnerforcoder.准备机器学习模型(MDL.)用于代码生成。该函数删除了一些不必要的属性。

  • 对于具有相应紧凑型号的模型,该模型Savelarnerforcoder.功能适用适当的袖珍的保存之前的模型功能。

  • 对于没有相应紧凑模型的模型,例如ClassificationKnn.分类线性回归线性令人疲惫的,和kdtreesearcher.,Savelarnerforcoder.函数删除诸如Quand参数优化属性,培训求解器信息等的属性。

loadlearnerforcoder.加载保存的模型Savelarnerforcoder.

替代功能

扩展能力

介绍了R2019b