主要内容

generateLearnerDataTypeFcn

为定点代码生成定义数据类型的Generate函数

描述

为。生成定点C/ c++代码预测一个机器学习模型的功能,使用generateLearnerDataTypeFcnsaveLearnerForCoderloadLearnerForCoder,codegen(MATLAB编码器)

  • 训练后的机器学习模型,保存模型使用saveLearnerForCoder

  • 通过使用生成的函数创建定义定点数据类型的结构generateLearnerDataTypeFcn

  • 定义一个入口点函数,通过使用这两个函数来加载模型loadLearnerForCoder和结构,然后调用预测函数。

  • 使用生成代码codegen,然后验证生成的代码。

generateLearnerDataTypeFcn函数需要Fixed-Point Designer™,而生成固定点C/ c++代码需要MATLAB®编码器™和定点设计师。

的定点代码生成工作流预测机器学习模型的功能。使用generateLearnerDataTypeFcn为突出显示的步骤。

例子

generateLearnerDataTypeFcn (文件名X生成一个数据类型的函数定义用于生成用于预测机器学习模型的定点C/ c++代码所需的变量的定点数据类型。文件名存储机器学习模型X包含的预测器数据预测模型的功能。

使用生成的函数创建定义定点数据类型的结构。然后,使用结构作为输入参数TloadLearnerForCoder

generateLearnerDataTypeFcn (文件名X名称,值通过使用一个或多个名称-值对参数指定其他选项。例如,可以指定“字”,32对定点数据类型使用32位字长。

例子

全部折叠

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

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

火车模型

加载电离层数据集,训练二值支持向量机分类模型。

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

Mdl是一个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文件
function [label,score] = myFixedPointPredict(X,T) %#codegen Mdl = loadLearnerForCoder('myMdl','DataType',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生成MEX函数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 (true),这意味着标签labels_fx是相等的。如果标签不相等,可按如下方法计算标签分类错误的百分比。

sum (strcmp (labels_fx、标签)= = 0)/元素个数(labels_fx) * 100
ans = 0

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

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

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

输入参数

全部折叠

MATLAB格式化二进制文件(MAT-file)的名称,该文件包含表示模型对象的结构数组,指定为字符向量或字符串标量。

您必须创建文件名文件使用saveLearnerForCoder,模型导入文件名可以是以下情况之一:

延伸文件名文件必须.mat.如果文件名没有扩展吗generateLearnerDataTypeFcn附加.mat

如果文件名不包括一个完整的路径,那么generateLearnerDataTypeFcn从当前文件夹加载文件。

例子:“myMdl”

数据类型:字符|字符串

预测数据预测函数的模型存储文件名,指定为n——- - - - - -p数字矩阵,n观察的次数是多少p为预测变量的数量。

数据类型:|

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:generateLearnerDataTypeFcn(文件名,X,‘OutputFunctionName’,‘myDataTypeFcn’,‘字’,32)生成名为的数据类型函数myDataTypeFcn在为每个变量定义定点数据类型时,使用32位作为单词长度。

生成函数的名称,指定为由逗号分隔的对组成的“OutputFunctionName”以及字符向量或字符串标量。的“OutputFunctionName”value必须是有效的MATLAB函数名。

中的文件名是默认函数名文件名紧随其后的是_datatype.例如,如果文件名myMdl,则默认函数名为myMdl_datatype

例子:“OutputFunctionName”、“myDataTypeFcn”

数据类型:字符|字符串

以位为单位的字长,指定为逗号分隔的对,由“字”和一个数字标量。

生成的数据类型的函数使用指定的变量为每个变量定义定点对象“字”价值。如果一个变量需要比指定值更长的字长,软件会将该变量的字长加倍。

最佳字长取决于您的目标硬件属性。当指定的字长超过目标硬件的最长字长时,生成的代码包含多字操作。

有关详细信息,请参见定点数据类型(定点设计师)

例子:“字”,32

数据类型:|

的输出参数的范围预测函数,指定为逗号分隔对,由“OutputRange”以及由两个元素(输出的最小值和最大值)组成的数字向量。

“OutputRange”值指定分类模型的预测类得分的范围和回归模型的预测响应的范围。属性指定范围的输出参数如下表所示“OutputRange”名称-值对的论点。

分类模型

模型 预测的函数模型 输出参数
决策树 预测 分数
决策树集合 预测 分数
支持向量机 预测 分数

回归模型

模型 预测的函数模型 输出参数
决策树 预测 Yfit
决策树集合 预测 Yfit
支持向量机 预测 yfit

X包含大量观察值且输出参数的范围已知时,指定“OutputRange”值以减少计算量。

如果不指定“OutputRange”值,然后软件使用预测器数据模拟输出范围X预测函数。

该软件确定的跨度的数字,定点数据可以通过使用“OutputRange”价值和“PercentSafetyMargin”价值。

例子:“OutputRange”,[0,1]

数据类型:|

安全裕度百分比,指定为逗号分隔对,由“PercentSafetyMargin”和一个数字标量。

对于每个变量,软件模拟变量的范围,并添加指定的安全裕度,以确定定点数据可以表示的数字跨度。然后,软件提出了不导致溢出的最大分数长度。

指定时要小心“PercentSafetyMargin”价值。如果可变范围很大,那么增加安全裕度可能会导致下溢,因为软件会减少部分长度,以使用给定的单词长度表示更大的范围。

例子:“PercentSafetyMargin”,15

数据类型:|

更多关于

全部折叠

数据类型的函数

由生成的数据类型函数generateLearnerDataTypeFcn为机器学习模型的预测生成定点C/ c++代码所需的变量定义定点数据类型的结构。使用数据类型函数的输出结构作为输入参数TloadLearnerForCoder

如果文件名“myMdl”,然后generateLearnerDataTypeFcn生成名为的数据类型函数myMdl_datatype.的myMdl_datatype函数支持此语法:万博1manbetx

T = myMdl_datatype (dt)

T = myMdl_datatype (dt)返回一个数据类型结构,该结构定义生成用于预测机器学习模型的定点C/ c++代码所需的变量的数据类型。

每个字段的T返回的定点对象fi(定点设计师).输入参数dt指定了数据类型定点对象的属性。

  • 指定dt作为“固定”(默认)用于定点代码生成。

  • 指定dt作为“双”来模拟定点代码的浮点行为。

使用输出结构T的第二个输入参数loadLearnerForCoder

结构T包含下表中的字段。这些字段定义了直接影响模型精度的变量的数据类型。这些变量,以及其他命名变量和内部变量,是运行预测模型的功能。

描述 字段
通用分类字段
  • XDataType(输入)

  • ScoreDataType(输出或内部变量)和TransformedScoreDataType(输出)

    • 如果您使用默认值训练模型“ScoreTransform”的价值“没有”“身份”(也就是说,你不转换预测的分数),然后ScoreDataType字段影响输出分数的精度。

    • 如果你用值来训练一个模型“ScoreTransform”除了“没有”“身份”(也就是说,你确实转换了预测分数),然后ScoreDataType字段影响内部未转换分数的精度。的TransformedScoreDataType字段影响转换后的输出分数的精度。

回归的公共域
  • XDataType(输入)

  • YFitDataType(输出)

决策树集合的附加字段
  • WeakLearnerOutputDataType(内部变量)-弱学习者输出的数据类型。

  • AggregatedLearnerWeightsDataType(内部变量)-弱学习者输出的加权集合的数据类型,仅在使用bagging训练模型时适用(“方法”,“包”).软件计算预测分数(ScoreDataType),方法是将总和除以学习者的权重之和。

支持向量机的其他字段
  • XnormDataType(内部变量),仅当您使用“标准化”“KernelScale”

  • InnerProductDataType(内部变量)

该软件根据每个变量的默认字长(16)和安全裕度(10%)提出不导致溢出的最大分数长度。

下面的代码显示了数据类型函数myMdl_datatype,生成的generateLearnerDataTypeFcn文件名“myMdl”模型在文件名file是一个支持向量机分类器。

函数T = myMdl_datatype (dt)如果Nargin < 1 dt =“固定”结束设置定点数学设置调频= fimath (“RoundingMethod”“地板”...“OverflowAction”“包装”...“ProductMode”“FullPrecision”...“MaxProductWordLength”, 128,...“SumMode”“FullPrecision”...“MaxSumWordLength”, 128);%预测器数据的数据类型T.XDataType = fi (fm[],真的,16日,14日,“数据类型”, dt);%输出分数的数据类型T.ScoreDataType = fi (fm[],真的,16日,14日,“数据类型”, dt);%内部变量%高斯核的平方距离dist = (x-sv)^2的数据类型G(x,sv) = exp(-dist),%,其中x为观测的预测数据,sv为支持向量万博1manbetxT.InnerProductDataType = fi([],真的,16 6调频,“数据类型”, dt);结束

提示

  • 为了提高所生成的定点代码的精度,您可以调优定点数据类型。的方法来修改定点数据类型数据类型的函数myMdl_datatype),创建新结构,然后使用新结构重新生成代码。你可以更新myMdl_datatype以两种方式之一起作用:

    • 重新生成myMdl_datatype通过使用函数generateLearnerDataTypeFcn及其名称-值对参数。

      如果增加单词长度或减少安全裕度,软件可以提出更长的分数长度,从而提高基于给定数据集生成的代码的精度。

    • 手动修改函数文件中的定点数据类型(myMdl_datatype.m).对于每个变量,您可以调优单词长度和分数长度并使用fimath(定点设计师)对象。

  • 在生成的定点代码中,与相应的浮点代码的精度相比,大量的操作或较大的变量范围可能导致精度损失。在训练SVM模型时,请记住以下提示,以避免在生成的定点代码中丧失精度:

    • 数据标准化(“标准化”)—为了避免支持向量机模型中支持向量的模型属性值溢出,可以标准化预测器数据。万博1manbetx而不是使用“标准化”在训练模型时,将预测器数据标准化,然后将数据传递给拟合函数预测函数,以便定点代码不包含用于标准化的操作。

    • 内核函数(“KernelFunction”) -使用高斯核或线性核优于使用多项式核。多项式核比其他核需要更高的计算复杂度,并且多项式核函数的输出是无界的。

    • 内核规模(“KernelScale”)—如果值为,则使用内核规模需要额外的操作“KernelScale”不是1。

    • 对于一类分类问题的预测,如果预测的类得分值有很大的范围,那么预测的精度可能会降低。

兼容性的考虑

全部展开

行为在R2020a中改变

另请参阅

||(定点设计师)|(定点设计师)|(定点设计师)|(MATLAB编码器)

介绍了R2019b