主要内容

generatelearnerdatatypefcn.

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

描述

为此生成固定点C / C ++代码预测一个机器学习模型的功能,使用generatelearnerdatatypefcn.Savelarnerforcoder.loadLearnerForCoder,codegen(MATLAB编码器)

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

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

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

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

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

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

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

例子

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

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

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

例子

全部折叠

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

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

火车模型

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

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

Mdl是一个分类VM.模型。

保存模型

将SVM分类模型保存到文件中myMdl.mat通过使用Savelarnerforcoder.

SavelAlnerForCoder(MDL,“myMdl”);

定义固定点数据类型

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

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 = []数据批次:二进制点缩放签名:签名WordLength:16 FractionLength:14 roundingmethod:地板溢出:包装ProductMode:FullPrecision MaxProductwordLength:128序列: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)的名称,该文件包含表示模型对象的结构数组,指定为字符向量或字符串标量。

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

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

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

例子:“myMdl”

数据类型:char|字符串

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

数据类型:|双倍的

名称-值参数

指定可选的逗号分隔的对名称,值论点。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen

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

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

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

例子:“OutputFunctionName”、“myDataTypeFcn”

数据类型:char|字符串

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

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

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

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

例子:'WordLength',32

数据类型:|双倍的

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

“OutputRange”值指定分类模型的预测类别分数的范围和回归模型的预测响应范围。下表列出了通过使用使用的输出参数来指定该范围“OutputRange”名称-值对的论点。

分类模型

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

回归模型

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

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

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

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

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

数据类型:|双倍的

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

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

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

例子:“PercentSafetyMargin”,15

数据类型:|双倍的

更多关于

全部折叠

数据类型的函数

由生成的数据类型函数generatelearnerdatatypefcn.创建一个定义用于生成用于预测机器学习模型所需的变量所需的变量的固定点数据类型的结构。使用数据类型函数的输出结构作为输入参数TloadLearnerForCoder

如果文件名“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(输出或内部变量)和变换edscoredatatype.(输出)

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

    • 如果你用值来训练一个模型“ScoreTransform”除了“没有”“身份”(即,您正在转换预测的分数),然后是ScoreDataType字段影响内部未转换分数的精度。这个变换edscoredatatype.字段影响转换后的输出分数的精度。

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

  • YFitDataType(输出)

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

  • AggregatedLearnerWeightsDataType(内部变量) - 弱学习者输出的加权聚合的数据类型,仅在使用袋装(“方法”,“包”).该软件计算预测的分数(ScoreDataType)通过将汇总除以学习者权重的总和。

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

  • InnerProductDataType(内部变量)

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

下面的代码显示了数据类型函数myMdl_datatypegeneratelearnerdatatypefcn.什么时候文件名“myMdl”模型在文件名文件是SVM分类器。

函数T = myMdl_datatype (dt)如果Nargin < 1 dt =“固定”结束设置定点数学设置调频= fimath ('roundingmethod'“地板”...“OverflowAction”“包装”...'ProductMode''fulteprecision'...“MaxProductWordLength”, 128,...“SumMode”'fulteprecision'...'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的%数据类型^ 2,%,其中x为观测的预测数据,sv为支持向量金宝appT.InnerProductDataType = fi([],真的,16 6调频,“数据类型”, dt);结束

提示

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

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

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

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

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

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

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

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

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

兼容性的考虑

展开全部

行为在R2020a中改变

另请参阅

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

介绍了R2019b