主要内容

saveLearnerForCoder

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

自从R2019b

描述

生成C / c++代码的对象的函数(包括机器学习模型预测,随机,knnsearch,rangesearch,isanomaly和增量学习函数),使用saveLearnerForCoder,loadLearnerForCoder,codegen(MATLAB编码器)。机器学习模型,训练后保存模型通过使用saveLearnerForCoder。定义一个入口点函数,通过使用加载模型loadLearnerForCoder并调用一个对象的功能。然后使用codegen或者是MATLAB®编码器™应用程序来生成C / c++代码。需要生成C / c++代码MATLAB编码器

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

代码生成工作流对象功能的机器学习模型。步骤1:火车模型。步骤2(强调):保存模型。第三步:定义一个入口点函数。第四步:生成代码。第五步:验证生成的代码。

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

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

定点代码生成工作流。步骤1:火车模型。步骤2(强调):保存模型。第三步:定义定点数据类型。第四步:定义一个入口点函数。第五步(可选):优化定点数据类型。第六步:生成代码。第七步:验证生成的代码。

例子

saveLearnerForCoder (Mdl,文件名)准备一个模型(Mdl)在MATLAB代码生成和保存格式的二进制文件(MAT-file)命名文件名。你可以通过文件名loadLearnerForCoder重建的模型对象文件名文件。

例子

全部折叠

机器学习模型,训练后保存模型通过使用saveLearnerForCoder。定义一个入口点函数,通过使用加载模型loadLearnerForCoder并调用预测训练模型的函数。然后使用codegen(MATLAB编码器)来生成C / c++代码。

这个例子简要解释了代码生成工作流的预测机器学习模型在命令行。更多细节,请参阅机器学习模型的代码生成预测在命令行。您还可以使用MATLAB编码器应用。生成代码代码生成的预测使用MATLAB编码器应用机器学习模型获取详细信息。了解代码生成寻找最近的邻居使用最近邻搜索器模型,明白了最近邻搜索器的代码生成

火车模型

加载费雪的虹膜数据集。删除所有观察setosa虹膜数据XY只包含数据两类。

负载fisheriris第1 = ~ strcmp(物种,“setosa”);X =量(第1:);Y =物种(第1);

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

Mdl = fitcsvm (X, Y);

Mdl是一个ClassificationSVM对象,它是一个线性支持向量机模型。线性支持向量机模型的预测系数提供足够的信息来预测新观察标签。把支持向量减少内存使用生成万博1manbetx的代码。把支持向量通过线性支持万博1manbetx向量机模型discard万博1manbetxSupportVectors函数。

Mdl = discard万博1manbetxSupportVectors (Mdl);

保存模型

将支持向量机分类模型保存到该文件SVMIris.mat通过使用saveLearnerForCoder

saveLearnerForCoder (Mdl“SVMIris”);

定义入口点函数

定义一个入口点函数命名classifyIris做以下几点:

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

  • 加载一个训练支持向量机分类模型。

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

函数标签= classifyIris (X)% # codegen% CLASSIFYIRIS虹膜物种使用支持向量机模型进行分类% CLASSIFYIRIS分类虹膜花测量X使用支持向量机SVMIris %模型文件。垫,然后返回类标签的标签。Mdl = loadLearnerForCoder (“SVMIris”);标签=预测(Mdl X);结束

添加% # codegen编译器指令(或编译指示)的入口点函数函数签名后,表明您打算为MATLAB算法生成代码。添加这个指令指示MATLAB代码分析器来帮助您诊断和解决违规,将导致错误在代码生成。

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

生成代码

生成代码的入口点函数使用codegen(MATLAB编码器)。因为C和c++静态类型语言中,您必须确定所有变量的属性在编译时的入口点函数。通过X的价值arg游戏选项来指定所生成的代码必须接受一个输入相同的数据类型和数组大小为训练数据X。如果观测的数量在编译时是未知的,您还可以指定输入所适应的使用coder.typeof(MATLAB编码器)。有关详细信息,请参见为代码生成指定适应可变参数指定入口点函数输入的属性(MATLAB编码器)

codegenclassifyIrisarg游戏{X}
代码生成成功。

codegen生成墨西哥人的功能classifyIris_mex与平台相关的扩展。

验证生成的代码

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

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

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

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

之前使用生成代码codegen,你可以使用buildInstrumentedMex(定点设计师)showInstrumentationResults(定点设计师)优化定点数据类型来提高定点代码的性能。记录最大和最小值的命名和内部变量预测使用buildInstrumentedMex。查看检测结果使用showInstrumentationResults;然后,根据结果,调整定点数据类型变量的属性。这个可选步骤的详细信息,请参阅定点代码生成SVM的预测

火车模型

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

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

Mdl是一个ClassificationSVM模型。

保存模型

将支持向量机分类模型保存到该文件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:定点:二进制扩展Signedness:签了字:16 FractionLength: 14 RoundingMethod:地板OverflowAction:包装ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128

定义入口点函数

定义一个入口点函数命名myFixedPointPredict做以下几点:

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

  • 加载一个定点的训练支持向量机分类模型用两个loadLearnerForCoder和结构T

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

函数(标签,分数)= myFixedPointPredict (X, T)% # codegenMdl = loadLearnerForCoder (“myMdl”,“数据类型”T);(标签,分数)=预测(Mdl X);结束

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

生成代码

XDataType场的结构T指定的定点数据类型预测数据。转换X中指定的类型T.XDataType通过使用(定点设计师)函数。

X_fx =投(X,“喜欢”,T.XDataType);

生成代码的入口点函数使用codegen。指定X_fx和持续的折叠T的入口点函数的输入参数。

codegenmyFixedPointPredictarg游戏{X_fx, coder.Constant (T)}
代码生成成功。

codegen生成墨西哥人的功能myFixedPointPredict_mex与平台相关的扩展。

验证生成的代码

通过预测数据预测myFixedPointPredict_mex比较输出。

(标签、分数)=预测(Mdl X);[labels_fx, scores_fx] = myFixedPointPredict_mex (X_fx T);

比较的输出预测myFixedPointPredict_mex

labels_fx verify_labels = isequal(标签)
verify_labels =逻辑1

isequal返回逻辑1(真正的),这意味着标签labels_fx是相等的。

如果你不满意的比较结果和想提高的精度生成的代码,您可以调整定点数据类型和重新生成代码。有关详细信息,请参见提示generateLearnerDataTypeFcn,数据类型的函数,定点代码生成SVM的预测

输入参数

全部折叠

机器学习模型,指定为一个完整的或紧凑的模型对象,如下表中给出支持的模型。万博1manbetx表也显示每个模型是否支持定点代码生成。万博1manbetx

文件名称,指定为一个特征向量或字符串标量。

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

的扩展文件名文件必须.mat。如果文件名没有扩展呢saveLearnerForCoder附加.mat

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

例子:“SVMMdl”

数据类型:字符|字符串

提示

  • 使用之前保存模型saveLearnerForCoder功能,您可以删除支持向量线性SVM模型或一个ECO万博1manbetxC模型与线性SVM学习者使用discard万博1manbetxSupportVectors函数。线性支持向量机模型的预测系数提供足够的信息来预测标签新观测和响应,和删除支持向量减少内存使用量在生成的代码中。万博1manbetx

    • 如果Mdl是一个线性支持向量机模型,该模型具有预测系数和支持向量,然后你可以删除的支持向量模型通过使用万博1manbetxdiscard万博1manbetxSupportVectors(分类)或函数discard万博1manbetxSupportVectors函数(回归)。默认情况下,支持向量机模型与线性内核包括预测系数和支持向量。万博1manbetx

    • 如果Mdl是一个ECOC模型与线性支持向量机的学习者,学习者都预测系数和支持向量,然后你可以删除从学习者通过使用支持向量万博1manbetxdiscard万博1manbetxSupportVectors函数。默认的Save万博1manbetxSupportVectors线性SVM学习者的价值。因此,默认情况下,一个ECOC模型不包括支持向量的学习者。万博1manbetx

算法

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

  • 对于一个拥有相应的紧凑的模型模型,saveLearnerForCoder应用适当的函数紧凑的函数模型之前拯救它。

  • 了一个模型,没有相应的契约模型,如ClassificationKNN,ClassificationKernel,ClassificationLinear,RegressionKernel,RegressionLinear,ExhaustiveSearcher,KDTreeSearcher,IsolationForest,saveLearnerForCoder函数删除属性如hyperparameter优化属性,培训解决信息等等。

loadLearnerForCoder负荷模型所救saveLearnerForCoder

选择功能

版本历史

介绍了R2019b