主要内容

generateLearnerDataTypeFcn

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

描述

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

  • 培训机器学习模型后,使用模型使用saveLearnerForCoder

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

  • 定义通过使用两者加载模型的入口点函数loadlearnerforcoder.和结构,然后拨打电话预测函数。

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

generateLearnerDataTypeFcn功能需要固定点Designer™,并生成固定点C / C ++代码需要马铃薯®编码器™和定点设计师。

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

例子

generatelearnerdatatypefcn(文档名称X生成A.数据类型功能为生成用于预测机器学习模型的定点C / C ++代码所需的变量定义了固定点数据类型。文档名称存储机器学习模型,和X包含的预测器数据预测模型的功能。

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

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

例子

全部收缩

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

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

火车模型

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

负载电离层mdl = fitcsvm(x,y,'骨箱''高斯');

MDL.是A.ClassificationSVM模型。

保存模型

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

saveLearnerForCoder (Mdl“myMdl”);

定义定点数据类型

使用generateLearnerDataTypeFcn生成一个函数,定义支持向量机模型预测所需变量的定点数据类型。

generatelearnerdatatypefcn(“myMdl”, X)

generateLearnerDataTypeFcn生成myMdl_datatype函数。

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

T = myMdl_datatype ('固定的'
T =结构与字段:XDatatype:[0x0 Embedded.fi] scoringatatype:[0x0嵌入式.fi] InnerProductDattype:[0x0嵌入式.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

  • 使用两者加载训练的SVM分类模型的定点版本loadlearnerforcoder.和结构T

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

类型myFixedPointPredict.m%显示myfixedpointpredict.m文件的内容
功能[标签,分数] = myfixedpointpredict(x,t)%#codegen mdl = loadlearnerforcoder('mymdl','datatype',t);[标签,得分] =预测(MDL,x);结束

笔记:如果单击该示例的右上角的按钮并在MATLAB®中打开示例,则MATLAB将打开示例文件夹。此文件夹包含入口点函数文件。

生成代码

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

x_fx = cast(x,'喜欢', T.XDataType);

使用生成入口点函数的代码Codegen..指定X_FX.和持续的折叠T作为入口点函数的输入参数。

Codegen.myfixedpointpredictarg游戏{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 = isequal(标签,标签_fx)
验证_labels =.逻辑1

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

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

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

Reldiff_scores = max(abs(scors_fx.double(:,1)-scores(:,1))./ scores(:,1)))
Reldiff_scores = 0.0055.

如果您对比较结果不满意并希望提高生成的代码的精度,则可以调整固定点数据类型并重新生成代码。有关详细信息,请参见提示generateLearnerDataTypeFcn数据类型功能, 和用于预测SVM的固定点代码生成

输入参数

全部收缩

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

您必须创建文档名称文件使用saveLearnerForCoder和模型文档名称可以是以下情况之一:

延伸的文档名称文件必须。垫.如果文档名称没有延伸,那么generateLearnerDataTypeFcn附加。垫

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

例子:“myMdl”

数据类型:字符|细绳

预测数据预测函数的模型存储文档名称,指定为一个n——- - - - - -p数字矩阵,其中n是观察人数和p为预测变量的数量。

数据类型:单身的|

名称值对参数

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

例子:generatelearnerdatatypefcn(filename,x,'OutputFunctionname','mydatatypefcn','wordlength',32)生成名为的数据类型函数myDataTypeFcn定义每个变量的定点数据类型时使用32位的字长。

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

中的文件名是默认函数名文档名称其次是_datatype.例如,如果文档名称mymdl.,然后默认函数名称是myMdl_datatype

例子:'OutputFunctionName','mydatatypefcn'

数据类型:字符|细绳

位中的字长度,指定为逗号分隔对组成“字”和一个数字标量。

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

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

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

例子:“字”,32

数据类型:单身的|

输出参数的范围预测函数,指定为逗号分隔对组成'outputrange'和两个元素的数字矢量(输出的最小值和最大值)。

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

分类模型

模型 预测模型的功能 输出参数
决策树 预测 分数
决策树的集合 预测 分数
SVM 预测 分数

回归模型

模型 预测模型的功能 输出参数
决策树 预测 YFIT.
决策树的集合 预测 YFIT.
SVM 预测 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(输入)

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

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

    • 如果您使用值培训模型'scoretransform'以外“没有”或者'身份'(也就是说,你确实转换了预测分数),然后scoringatatype.字段影响内部未转换分数的精度。的TransformedScoreDataType字段影响转换后的输出分数的精度。

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

  • yfitdatatyp.(输出)

决策树的集合的其他领域
  • DevellearnerOutputPattype.(内部变量)-弱学习者输出的数据类型。

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

SVM的其他字段
  • XnormDataType(内部变量),仅适用于使用模型使用“标准化”或者'kernelscale'

  • InnerProductDataType.(内部变量)

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

下面的代码显示了数据类型函数myMdl_datatypegenerateLearnerDataTypeFcn什么时候文档名称“myMdl”和模型文档名称file是一个支持向量机分类器。

功能T = myMdl_datatype (dt)如果nargin <1 dt ='固定的'结束设置定点数学设置fm = fimath(“RoundingMethod”“地板”......'溢出''裹'......“ProductMode”“FullPrecision”......'maxproductwordlength',128,......“SumMode”“FullPrecision”......“MaxSumWordLength”,128);%预测器数据的数据类型t.xdatatype = fi([],true,16,14,fm,'数据类型',dt);%输出分数的数据类型T.ScoreDataType = fi (fm[],真的,16日,14日,'数据类型',dt);%内部变量%高斯核的平方距离dist = (x-sv)^2的数据类型G(x,sv) = exp(-dist),其中x是观察的预测数据,SV是支持向量金宝appt.innerProductDataType = Fi([],真,16,6,FM,'数据类型',dt);结束

提示

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

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

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

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

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

    • 数据标准化(“标准化”) - 为避免SVM模型中支持向量的模型属性值中的溢出,可以标准化预测器数据。金宝app而不是使用“标准化”名称 - 值对参数在培训模型时,在将数据传递给拟合功能之前标准化预测器数据预测功能使固定点代码不包括标准化的操作。

    • 内核函数('骨箱') - 使用高斯内核或线性内核优选使用多项式内核。多项式内核需要比其他内核更高的计算复杂性,并且多项式内核函数的输出是无限的。

    • 内核刻度('kernelscale') - 如果值的值,使用内核比例需要额外的操作'kernelscale'不是1。

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

兼容性考虑因素

展开全部

R2020A中的行为发生了变化

另请参阅

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

介绍了R2019b