loadLearnerForCoder

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

描述

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

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

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

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

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

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

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

该模型在文档名称必须是一个SVM分类模型或SVM回归模型。

例子

全部收缩

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

这个例子简要介绍了机器学习模型在命令行预测的代码生成流程。有关详细信息,请参阅代码生成在命令行机器学习模型预测。您也可以使用MATLAB编码器应用程序生成代码。看到代码生成使用MATLAB编码器应用机器学习模型预测获取详细信息。要了解使用最近邻搜索器模型查找最近邻的代码生成,请参见代码生成的最近邻居搜索

火车模型

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

加载fisheririsINDS =〜的strcmp(物种,'setosa');X = MEAS(INDS,:);Y =物种(INDS);

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

MDL = fitcsvm(X,Y);

MDLClassificationSVM模型。

保存模型

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

saveLearnerForCoder(MDL,'SVMIris');

定义入口点函数

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

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

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

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

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

添加%#代码生成指向函数签名之后的入口函数的编译器指令(或pragma),表示您打算为MATLAB算法生成代码。添加这个指令将指导MATLAB代码分析器帮助您诊断和修复在代码生成过程中可能导致错误的违规。

注意:如果您单击位于此示例右上方的按钮,并在MATLAB®中打开此示例,则MATLAB®将打开示例文件夹。此文件夹包含入口点函数文件。

生成代码

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

代码生成classifyIris-args{X}

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

验证生成的代码

使用比较分类的标签预测classifyIrisclassifyIris_mex

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

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

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

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

火车模型

加载电离层数据集和训练的二元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:为0x0 embedded.fi] 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文件的显示内容
函数[标签,得分= myFixedPointPredict(X,T)%#代码生成MDL = loadLearnerForCoder( 'myMdl', '数据类型',T);[标号,得分=预测(MDL,X);结束

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

生成代码

XDataType该结构的场Ť指定所述预测数据的定点数据类型。兑换X的类型指定在T.XDataType通过使用函数。

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

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

代码生成myFixedPointPredict-args{X_fx,coder.Constant(T)}

代码生成生成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 (true),这意味着标签labels_fx是相等的。如果标签不相等,就可以计算错误分类标签的百分比如下。

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

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

relDiff_scores = MAX(ABS((scores_fx.double(:,1)-scores(:,1))./得分(:,1)))
relDiff_scores = 0.0055

如果你不与比较结果感到满意,并希望提高所生成代码的精度,可以调定点数据类型,并重新生成代码。有关详细信息,请参阅提示generateLearnerDataTypeFcn数据类型功能定点代码生成SVM预测

输入参数

全部收缩

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

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

的扩展文档名称文件必须。垫。如果文档名称没有扩展名,然后loadLearnerForCoder追加。垫

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

例:“铜牌”

数据类型:烧焦|

定点数据类型,指定为结构。该参数是针对定点C / C ++代码生成。

创造Ť使用由所生成的功能generateLearnerDataTypeFcn。有关所产生的功能和结构的细节ŤgenerateLearnerDataTypeFcn数据类型功能

您可以使用此参数时,在该模式文档名称文件是一个SVM分类模型(CompactClassificationSVM)或支持向量机回归模型(CompactRegressionSVM)。

数据类型:结构

输出参数

全部收缩

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

算法

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

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

  • 对于一个模型,不具有相应的紧凑型模式,如ClassificationKNNClassificationLinearRegressionLinearExhaustiveSearcherKDTreeSearcher中,saveLearnerForCoder函数删除诸如超参数优化性能,训练求解器信息,以及其他属性。

loadLearnerForCoder加载模型通过保存saveLearnerForCoder

另类功能

扩展功能

介绍了在R2019b