主要内容

loadlearnerforcoder.

从已保存的模型重建模型对象进行代码生成

描述

为机器学习模型的目标函数生成C/ c++代码(包括预测随机的knnsearch.rangesearch.,增量学习函数),使用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(文档名称,'dataType','单')重建单精度分类或回归模型(Mdl)从存储在Matlab格式化的二进制文件(MAT文件)中的模型中命名文档名称

例子

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

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

例子

全部折叠

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

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

火车模型

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

加载fisheririsinds =〜strcmp(物种,'setosa');X =量(第1:);Y =物种(第1);

使用已加工的数据金宝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作为价值- args.选项指定生成的代码必须接受与训练数据具有相同数据类型和数组大小的输入X.如果观察次数在编译时未知,则还可以使用的方式将输入指定为可变大小coder.typeof(MATLAB编码器).有关详细信息,请参阅指定代码生成的变量大小参数指定入口点功能输入的属性(MATLAB编码器)

Codegen.classifyiris.-  args.{X}
代码成功。

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

验证生成的代码

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

label1 =预测(Mdl X);label2 = classifyIris (X);label3 = classifyIris_mex (X);验证_label = isequal(label1,label2,label3)
验证_Label =.逻辑1

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

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

这个例子简要解释了在命令行预测机器学习模型的单精度代码生成工作流。有关详细信息,请参见命令行中计算机学习模型预测的代码生成.您还可以使用MATLAB编码器应用程序生成代码。看基于MATLAB编码器的机器学习模型预测代码生成有关详细信息。

火车模型

加载fisheriris数据集。创建X作为一个数字矩阵,包含四个花瓣测量150鸢尾。创建y作为字符向量的细胞阵列,包含相应的虹膜种类。

加载fisheririsx = meas;y =物种;

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

mdl = fitcnb(x,y);

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

保存模型

将朴素贝叶斯分类模型保存到文件中NaiveBayesiris.mat.通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,'naivebayesiris');

定义入口点函数

定义一个入口点函数名为classifyIrisSingle这有以下内容:

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

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

  • 使用单精度加载分类模型对鸢尾花测量进行标签预测。

类型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作为价值- args.选项指定生成的代码必须接受与训练数据具有相同数据类型和数组大小的输入X.如果观察次数在编译时未知,则还可以使用的方式将输入指定为可变大小coder.typeof(MATLAB编码器).有关详细信息,请参阅指定代码生成的变量大小参数指定入口点功能输入的属性(MATLAB编码器)

Xpred =单(x);Codegen.classifyIrisSingle-  args.Xpred.
代码成功。

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

验证生成的代码

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

label1 =预测(Mdl X);label2 = classififirissingle(x);label3 = classifirissingle_mex(xpred);验证_label = isequal(label1,label2,label3)
验证_Label =.逻辑1

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

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

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

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

火车模型

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

加载电离层mdl = fitcsvm(x,y,“KernelFunction”'高斯');

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: [0 x0嵌入。FI.] ScoreDataType: [0x0 embedded.fi] InnerProductDataType: [0x0 embedded.fi]

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

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

定义入口点函数

定义一个入口点函数名为myfixedpointpredict这有以下内容:

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

  • 加载一个定点版本的训练支持向量机分类模型使用两者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.myfixedpointpredict-  args.{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 = isequal(标签,标签_fx)
verify_labels =逻辑1

是平等的返回逻辑1(true),这意味着标签Labels_fx.是平等的。如果标签不等于,则可以根据以下计算错误分类标签的百分比。

sum(strcmp(labels_fx,labels)== 0)/ numel(标签_fx)* 100
ans = 0.

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

relDiff_scores = max (abs (scores_fx.double(: 1)分数(:1))。/分数(:1)))
relDiff_scores = 0.0055

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

输入参数

全部折叠

包含表示模型对象的结构阵列的MAT文件的名称,指定为字符向量或字符串标量。你必须创造文档名称文件使用Savelarnerforcoder.loadlearnerforcoder.重建存储在存储的模型文档名称文件编译时的文件。

延伸文档名称文件必须。垫.如果文档名称没有延伸,那么loadlearnerforcoder.阑尾。垫

如果文档名称那时不包括完整路径loadlearnerforcoder.从当前文件夹加载文件。

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

例子:'mdl'

数据类型:char|细绳

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

创建T.使用由此生成的函数generatelearnerdatatypefcn..生成的函数和结构的详细信息T., 看generatelearnerdatatypefcn.数据类型功能

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

数据类型:塑造

输出参数

全部折叠

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

提示

  • 对于高斯过程回归(GPR)模型的单精度代码生成,使用Fitrgp(x,y,'标准化',1)

算法

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

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

  • 对于没有相应的紧凑型模型的模型,例如ClassificationKnn.ClassificationLinear回归线性令人疲惫的,KDTreeSearcher, 这Savelarnerforcoder.函数删除了超参数优化属性、训练求解器信息等属性。

loadlearnerforcoder.加载保存的模型Savelarnerforcoder.

选择功能

扩展能力

在R2019B中介绍