saveLearnerForCoder

在文件的代码生成保存模型对象

描述

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

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

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

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

saveLearnerForCoder(MDL文档名称准备一个分类模型,回归模型,或者最近的邻居搜索(MDL)代码生成,并在指定的MATLAB格式的二进制文件(MAT文件)保存它文档名称。你可以通过文档名称loadLearnerForCoder以重构从模型对象文档名称文件。

例子

全部收缩

训练机器学习模型后,利用保存模型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该执行以下操作:

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

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

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

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

添加%#代码生成编译器指令(或编译)到函数签名后的入口点函数,以表明你打算生成的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(真),这意味着标签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预测

输入参数

全部收缩

机器学习模型,指定为一个完整的或紧凑模型对象为支持的机型以下表中给出。万博1manbetx

文件名,指定为矢量字符或字符串标量。

如果文档名称文件存在,那么saveLearnerForCoder覆盖文件。

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

如果文档名称不包括完整路径,然后saveLearnerForCoder将文件保存到当前文件夹。

例:'SVMMdl'

数据类型:烧焦|

算法

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

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

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

loadLearnerForCoder加载模型通过保存saveLearnerForCoder

另类功能

介绍了在R2019b