loadLearnerForCoder

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

描述

为了生成C / C ++的对象函数代码(预测随机knnsearch,或rangesearch)的机器学习模型,使用saveLearnerForCoderloadLearnerForCoder,codegen。训练机器学习模型后,利用保存模型saveLearnerForCoder。定义一个入口点函数,它使用以下命令加载模型loadLearnerForCoder并调用对象的功能。然后用codegen或者MATLAB®编码器™应用程序,以产生C / C ++代码。生成C / C ++代码需要MATLAB编码器

此流程图显示了机器学习模型目标函数的代码生成工作流。用loadLearnerForCoder突出显示的步骤。

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

该流程图显示了定点代码生成的工作流预测机器学习模型的功能。用loadLearnerForCoder突出显示的步骤。

Mdl= loadLearnerForCoder(文件名重建一个分类模型,回归模型,或者最近的邻居搜索(Mdl)从存储在MATLAB模型格式的二进制文件(MAT文件)命名文件名。您必须创建文件名文件的使用saveLearnerForCoder

Mdl= loadLearnerForCoder(文件名,'数据类型',Ť返回中存储的模型的定点版本文件名。结构Ť包含要使用的,用于指定变量的定点数据类型的字段需要预测该模型的功能。创建Ť使用由所生成的功能generateLearnerDataTypeFcn

使用此语法的入口点函数,并使用codegen以产生用于入口点函数定点代码。生成代码时,您只能使用此语法。

在该模型文件名必须是支持向量机的分类模型或回归模型。

例子

全部收缩

训练机器学习模型后,利用保存模型saveLearnerForCoder。定义一个入口点函数,它使用以下命令加载模型loadLearnerForCoder并调用预测在训练模型的功能。然后用codegen来生成C / C ++代码。

本例简要说明了命令行预测机器学习模型的代码生成工作流。有关更多细节,请参见代码生成在命令行机器学习模型预测。您还可以使用MATLAB Coder应用程序生成代码机器学习模型预测的代码生成使用MATLAB编码器应用了解详情。要了解代码生成查找使用最近邻居搜索模型最近的邻居,看到代码生成的最近邻居搜索

火车模型

加载费舍尔的虹膜数据集。删除所有观测setosa虹膜数据,以便Xÿ包含只有两班的数据。

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

使用处理后的数据万博1manbetx集训练支持向量机(SVM)分类模型。

Mdl = fitcsvm (X, Y);

MdlClassificationSVM模型。

保存模型

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

saveLearnerForCoder(MDL,“SVMIris”);

定义入口点函数

定义一个入口点函数classifyIris该执行以下操作:

  • 接受鸢尾花测量值与对应的列MEAS,并返回预测的标签。

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

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

类型classifyIris.m%classifyIris.m文件的显示内容
功能标记= classifyIris(X)%#代码生成%CLASSIFYIRIS分类光圈使用SVM模型%CLASSIFYIRIS分类上述鸢尾花测量在X使用SVM模型%在文件SVMIris.mat物种,然后在标签返回类别标签。MDL = loadLearnerForCoder( 'SVMIris');标记=预测(MDL,X);结束

添加% # codegen编译器指令(或编译)到函数签名后的入口点函数,以表明你打算生成的MATLAB算法代码。添加此指令指示MATLAB代码分析器,以帮助您诊断和解决冲突,将代码生成过程中导致错误。

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

生成代码

使用生成的入口点函数的代码codegen。由于C和C ++的静态类型语言,你必须在编译时确定的入口点函数的所有变量的性质。通过X的价值-args选项指定生成的代码必须接受与训练数据具有相同数据类型和数组大小的输入X。如果观察的数量是在编译时未知的,你还可以通过使用指定的输入作为可变大小coder.typeof。有关详细信息,请参阅指定代码生成可变尺寸参数指定入口点函数输入的属性(MATLAB编码器)。

codegenclassifyIris-args{X}

codegen生成MEX函数classifyIris_mex与平台相关的扩展。

验证生成的代码

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

label1的预测=(MDL,X);LABEL2 = classifyIris(X);LABEL3 = classifyIris_mex(X);verify_label = ISEQUAL(label1的,LABEL2,LABEL3)
verify_label =合乎逻辑1

是平等的返回逻辑1(真),这意味着所有的输入是相等的。分类所有三种方式的标签相同。

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

在使用以下命令生成代码之前codegen, 您可以使用buildInstrumentedMexshowInstrumentationResults优化的定点数据类型,以提高定点代码的性能。用于预测通过使用命名和内部变量的记录最小值和最大值buildInstrumentedMex。查看仪器使用结果showInstrumentationResults;然后,根据结果,调整变量的定点数据类型属性。有关此可选步骤的详细信息,请参阅支持向量机预测的定点编码生成

火车模型

加载电离层数据集和训练的二元SVM分类模型。

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

MdlClassificationSVM模型。

保存模型

该SVM分类模型保存到文件myMdl.mat通过使用saveLearnerForCoder

saveLearnerForCoder(MDL,'myMdl');

定义定点数据类型

generateLearnerDataTypeFcn来生成用于定义SVM模型的预测所需要的变量的定点数据类型的函数。

generateLearnerDataTypeFcn ('myMdl',X)

generateLearnerDataTypeFcn生成myMdl_datatype功能。

创建一个结构Ť使用。定义定点数据类型myMdl_datatype

T = myMdl_datatype('固定'
T =同场的结构:XDataType: [0 x0嵌入。科幻] ScoreDataType: [0x0 embedded.fi] InnerProductDataType: [0x0 embedded.fi]

结构Ť包括命名和内部变量领域需要运行预测功能。每个字段都包含一个固定点对象,通过返回科幻。定点对象指定定点数据类型属性,诸如单词长度和分数长度。例如,显示预测数据的定点数据类型属性。

T.XDataType
ANS = [] DataTypeMode:定点:二进制点缩放符号性:签字字长:16 FractionLength:14 RoundingMethod:地板OverflowAction:裹ProductMode:FullPrecision MaxProductWordLength:128 SumMode:FullPrecision MaxSumWordLength:128

定义入口点函数

定义一个入口点函数myFixedPointPredict该执行以下操作:

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

  • 通过同时使用加载训练的SVM分类模型的定点版本loadLearnerForCoder和结构Ť

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

类型myFixedPointPredict.m%myFixedPointPredict.m文件的显示内容
function [label,score] = myFixedPointPredict(X,T) %#codegen Mdl = loadLearnerForCoder('myMdl','DataType',T);(标签,分数)=预测(Mdl X);结束

注意:如果单击本示例右上方的按钮,并在MATLAB®中打开示例,MATLAB将打开示例文件夹。这个文件夹包含了入口点函数文件。

生成代码

XDataType该结构的场Ť指定预测器数据的定点数据类型。转换X的类型指定在T.XDataType通过使用功能。

X_fx =铸造(X,'喜欢',T.XDataType);

使用生成的入口点函数的代码codegen。指定X_fx和恒定折叠Ť作为入口点函数的输入参数。

codegenmyFixedPointPredict-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

verify_labels = ISEQUAL(标签,labels_fx)
verify_labels =合乎逻辑1

是平等的返回逻辑1(真),这意味着标签labels_fx是相等的。如果标签不相等,就可以计算错误分类标签的百分比如下。

总和(的strcmp(labels_fx,标签)== 0)/ numel(labels_fx)* 100
ans = 0

寻找最大的得分输出之间的相对差异。

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

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

输入参数

全部收缩

包含表示模型对象的结构阵列,指定为字符向量或标量的字符串的MAT-文件的名称。您必须创建文件名使用文件saveLearnerForCoder

loadLearnerForCoder重建存储在模型文件名文件在编译时。对于支持万博1manbetx的机型,请参见Mdl输入参数的saveLearnerForCoder

延伸的文件名文件必须是.mat。如果文件名没有扩展名,然后loadLearnerForCoder追加.mat

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

例:“铜牌”

数据类型:烧焦|

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

创建Ť所生成的函数generateLearnerDataTypeFcn。有关生成的函数和结构的详细信息ŤgenerateLearnerDataTypeFcn数据类型功能

的模型时,可以使用此参数文件名文件是一个SVM分类模型(CompactClassificationSVM)或SVM回归模型(CompactRegressionSVM)。

数据类型:结构

输出参数

全部收缩

机器学习模型,返回这些模型对象之一:

算法

saveLearnerForCoder准备一个机器学习模型(Mdl),用于代码生成。该函数将删除不需要用于预测一些属性。

  • 对于具有相应紧凑模型的模型,则saveLearnerForCoder功能应用合适的紧凑在保存前运作的模式。

  • 对于一个模型,不具有相应的紧凑型模式,如ClassificationKNNClassificationLinearRegressionLinearExhaustiveSearcher,KDTreeSearcher中,saveLearnerForCoder函数删除诸如超参数优化属性、训练求解器信息等属性。

loadLearnerForCoder加载模型通过保存saveLearnerForCoder

选择功能

扩展功能

介绍了在R2019b