主要内容

generateLearnerDataTypeFcn

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

描述

预测一个机器学习模型的功能,使用generateLearnerDataTypeFcnsaveLearnerForCoderloadLearnerForCodercodegen(MATLAB编码器)

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

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

  • 定义一个入口点函数,该函数通过使用loadLearnerForCoder和结构,然后调用预测函数。

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

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

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

定点代码生成工作流。第一步:训练模特。步骤2:保存模型。步骤3(突出显示):定义定点数据类型。步骤4:定义一个入口点函数。步骤5(可选):优化定点数据类型。步骤6:生成代码。步骤7:验证生成的代码。

例子

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

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

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

例子

全部崩溃

训练后的机器学习模型,保存模型使用saveLearnerForCoder.对于定点代码生成,使用生成的数据类型函数指定预测所需变量的定点数据类型generateLearnerDataTypeFcn这个n,define an entry-point function that loads the model by using bothloadLearnerForCoder指定的定点数据类型,并调用预测模型的功能。使用codegen(MATLAB编码器)为入口点函数生成定点C/C++代码,然后验证生成的代码。

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

列车模型

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

负载电离层Mdl = fitcsvm (X, Y,“内核函数”“高斯”);

Mdl是一个分类VM模型。

保存模型

将SVM分类模型保存到文件中myMdl.mat利用saveLearnerForCoder

saveLearnerForCoder(Mdl,“myMdl”);

定义定点数据类型

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

generateLearnerDataTypeFcn (“myMdl”,X)

generateLearnerDataTypeFcn生成myMdl_datatype函数。

创建一个结构T通过使用定义定点数据类型的myMdl_datatype

T = myMdl_datatype (“固定”
T=带字段的结构:XDataType:[0x0 embedded.fi]ScoreDataType:[0x0 embedded.fi]InnerProductDataType:[0x0 embedded.fi]

结构T包括运行所需的命名变量和内部变量的字段预测每个字段都包含一个定点对象,由fi(定点设计器)这个fixed-point object specifies fixed-point data type properties, such as word length and fraction length. For example, display the fixed-point data type properties of the predictor data.

T.XDataType
ans=[]数据类型模式:固定点:二进制点缩放符号性:符号字长:16分形长度:14舍入方法:楼层溢出操作:换行ProductMode:FullPrecision MaxProductWordLength:128总和模式:FullPrecision MaxSumWordLength:128

定义入口点函数

定义一个名为myFixedPointPredict它的作用如下:

  • 接受预测数据X以及定点数据类型结构T

  • 使用这两种方法加载经过训练的SVM分类模型的定点版本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\u mex具有依赖于平台的扩展。

验证生成的代码

将预测数据传递给预测myFixedPointPredict\u mex比较输出。

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

比较来自的输出预测myFixedPointPredict\u mex

labels_fx verify_labels = isequal(标签)
验证\u标签=逻辑1

isequal返回逻辑1(true),这意味着标签labels_fx是相等的。如果标签不相等,可按如下方法计算标签分类错误的百分比。

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

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

relDiff_分数=最大值(绝对值((分数)双倍(:,1)-分数(:,1))。/分数(:,1)))
relDiff_分数=0.0055

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

输入参数

全部崩溃

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

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

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

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

例子:“myMdl”

数据类型:烧焦|字符串

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

数据类型:|双重的

名称-值参数

指定可选的逗号分隔的对名称,值论据。的名字参数名和价值是对应的值。的名字必须出现在引号内。您可以按任意顺序指定多个名称和值对参数,如下所示:名称1,值1,…,名称,值

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

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

默认函数名是中的文件名文件名紧随其后的是_数据类型。例如,如果文件名myMdl,则默认函数名为myMdl_datatype

例子:“OutputFunctionName”、“myDataTypeFcn”

数据类型:烧焦|字符串

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

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

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

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

例子:“字长”,32

数据类型:|双重的

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

“输出范围”值指定分类模型的预测类分数范围和回归模型的预测响应范围。下表列出了可以使用“输出范围”名称-值对的论点。

分类模型

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

回归模型

模型 预测模型的功能 输出参数
决策树 预测 伊菲特
决策树集合 预测 伊菲特
支持向量机 预测 yfit

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

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

软件通过使用“输出范围”价值和“百分之安全边际”价值。

例子:“输出范围”,[0,1]

数据类型:|双重的

安全裕度百分比,指定为逗号分隔对,包括“百分之安全边际”和一个数字标量。

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

指定时要小心“百分之安全边际”如果变量范围较大,则增加安全裕度可能会导致下溢,因为软件使用给定的字长减少分数长度以表示更大的范围。

例子:“PercentSafetyMargin”,15

数据类型:|双重的

更多关于

全部崩溃

数据类型的函数

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

如果文件名“myMdl”,然后generateLearnerDataTypeFcn生成名为的数据类型函数myMdl_datatype这个myMdl_datatype函数支持以下语法:金宝app

T = myMdl_datatype (dt)

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

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

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

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

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

结构T包含下表中的字段。这些字段定义直接影响模型精度的变量的数据类型。运行预测模型的功能。

描述 领域
用于分类的公共字段
  • XDataType(输入)

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

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

    • 如果使用的值为训练模型“分数变换”除了“没有”“身份”(也就是说,您需要转换预测分数),然后ScoreDataType字段影响内部未转换分数的精度TransformedScoreDataType字段影响转换后的输出分数的精度。

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

  • YFitDataType(产出)

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

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

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

  • InnerProductDataType(内部变量)

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

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

作用T = myMdl_datatype (dt)如果纳金<1dt=“固定”结束设置定点数学设置调频= fimath (“取整法”“地板”...“溢出动作”“包装”...“产品模式”“全精度”...“MaxProductWordLength”,128,...“SumMode”“全精度”...“MaxSumWordLength”,128);%预测器数据的数据类型T.XDataType = fi (fm[],真的,16日,14日,“数据类型”,dt);%输出分数的数据类型T.ScoreDataType = fi (fm[],真的,16日,14日,“数据类型”,dt);%内部变量%高斯核G(x,sv)=exp(-dist)的平方距离dist=(x-sv)^2的数据类型,%,其中x为观测的预测数据,sv为支持向量金宝appT.InnerProductDataType = fi([],真的,16 6调频,“数据类型”,dt);结束

提示

  • 要提高生成的定点代码的精度,可以调整定点数据类型。通过更新数据类型函数myMdl_datatype),创建新结构,然后使用新结构重新生成代码。你可以更新myMdl_datatype以两种方式之一起作用:

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

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

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

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

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

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

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

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

兼容性考虑

全部展开

R2020a中的行为发生了变化

另请参阅

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

介绍了R2019b