主要内容

loadlearnerforcoder.

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

描述

为机器学习模型的目标函数生成C/ c++代码(包括预测随机的knnsearch.rangesearch.,增量学习函数),使用saveLearnerForCoderloadlearnerforcoder.,Codegen.(MATLAB编码器). 训练机器学习模型后,使用saveLearnerForCoder.定义一个入口点函数,通过使用loadlearnerforcoder.并调用对象函数。然后使用Codegen.或者是马铃薯®编码器™应用程序生成C / C ++代码。生成C / C ++代码需要Matlab编码器

对于支持单精度C / C ++代码生成金宝app的功能,使用saveLearnerForCoderloadlearnerforcoder.,Codegen.(MATLAB编码器);指定名称值参数'dataType','single'当你打电话的时候loadlearnerforcoder.函数。

该流程图展示了机器学习模型对象函数的代码生成流程。用loadlearnerforcoder.对于突出的步骤。

定点C/ c++代码生成需要一个额外的步骤,定义预测所需变量的定点数据类型。通过使用生成的数据类型函数创建定点数据类型结构generateLearnerDataTypeFcn,并使用该结构作为输入参数loadlearnerforcoder.在一个入学点函数中。生成固定点C / C ++代码需要Matlab编码器和定点设计师™。

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

例子

Mdl= loadLearnerForCoder (文档名称重建分类模型,回归模型或最近的邻居搜索器(Mdl)从存储在Matlab格式化的二进制文件(MAT文件)中的模型中命名文档名称. 您必须创建文档名称文件的使用saveLearnerForCoder

例子

Mdl= loadLearnerForCoder (文档名称,'dataType','单')重建单精度分类或回归模型(Mdl)从存储在Matlab格式化的二进制文件(MAT文件)中的模型中命名文档名称

例子

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

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

例子

全部折叠

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

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

火车模型

载入费雪的虹膜数据集。去除所有观测到的虹膜数据,以便Xy只包含两个类的数据。

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

使用处理后的数据金宝app集训练支持向量机分类模型。

Mdl = fitcsvm (X, Y);

Mdl是A.ClassificationSVM模型。

保存模型

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

saveLearnerForCoder (Mdl'svmiris');

定义入口点函数

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

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

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

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

类型classifyIris.m%显示classifyiris.m文件的内容
% classifyIris使用文件SVMIris中的SVM %模型对X中的鸢尾花进行分类。Mat,然后返回label中的类标签。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=分类虹膜(X);label3=分类Iris_mex(X);验证_label=isequal(label1、label2、label3)
verify_label =逻辑1

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

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

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

火车模型

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

加载fisheririsX =量;Y =物种;

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

Mdl = fitcnb (X, Y);

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

保存模型

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

saveLearnerForCoder (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函数classificirissingle_mex.与平台相关的扩展。

验证生成的代码

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

label1 =预测(mdl,x);label2 = classififirissingle(x);label3 = classifirissingle_mex(xpred);验证_label = isequal(label1,label2,label3)
verify_label =逻辑1

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

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

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

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

火车模型

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

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

Mdl是A.ClassificationSVM模型。

保存模型

将SVM分类模型保存到文件中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: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 14 RoundingMethod: Floor OverflowAction: Wrap ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: 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文件的名称,指定为字符向量或字符串标量。你必须创造文档名称文件使用saveLearnerForCoderloadlearnerforcoder.中存储的模型文档名称文件编译时的文件。

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

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

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

例子:“Mdl”

数据类型:字符|细绳

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

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

您可以在模型中使用此参数文档名称文件是支持向量机模型、决策树模型和决策树的集合。

数据类型:塑造

输出参数

全部折叠

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

提示

  • 对于高斯过程回归(GPR)模型的单精度代码生成,使用fitrgp (X, Y,“标准化”,1)

算法

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

  • 对于具有相应紧凑模型的模型,则saveLearnerForCoder函数应用适当的紧凑的函数,然后保存模型。

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

loadlearnerforcoder.加载保存的模型saveLearnerForCoder

选择功能

扩展能力

在R2019B中介绍