generateLearnerDataTypeFcn
描述
生成定点C / c++代码预测
机器学习模型的函数,使用generateLearnerDataTypeFcn
,saveLearnerForCoder
,loadLearnerForCoder
,codegen
(MATLAB编码器)。
机器学习模型,训练后保存模型
saveLearnerForCoder
。创建一个结构,定义了定点使用函数生成的数据类型
generateLearnerDataTypeFcn
。定义一个入口点函数,通过使用两个加载模型
loadLearnerForCoder
和结构,然后调用预测
函数。使用生成代码
codegen
,然后验证生成的代码。
的generateLearnerDataTypeFcn
函数需要定点设计师™和生成定点C / c++代码的需要MATLAB®编码器™和定点设计师。
这个流程图显示了定点代码生成的工作流预测
机器学习模型的函数。使用generateLearnerDataTypeFcn
突出显示的步骤。
例子
生成预测的定点C / c++代码
机器学习模型,训练后保存模型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的预测。
使用查找表来近似分数转换
自从R2023a
创建一个定点数据类型结构使用生成的函数generateLearnerDataTypeFcn
。更新结构包括一个查找表,接近得分转换功能的训练分类器。然后,生成定点代码使用更新后的结构。
火车模型
加载census1994
的数据集,其中包含的变量adultdata
和成人
。这些变量包括人口数据来自美国人口普查局用来预测一个人是否使超过50000美元一年。您可以使用adultdata
训练模型和成人
测试训练模型。
负载census1994
考虑一个模型,预测员工的工资类别考虑到他们的年龄,工人阶级,教育水平、资本收益和损失,每周工作小时数。提取感兴趣的变量,并将它们保存在表。
台= adultdata (:, {“年龄”,“education_num”,“capital_gain”,“capital_loss”,“hours_per_week”});tblTest =成人(:,{“年龄”,“education_num”,“capital_gain”,“capital_loss”,“hours_per_week”});
定点代码生成不支持表或分类数组。万博1manbetx因此,定义使用一个数字矩阵,预测数据和使用一个逻辑向量定义类标签。一个逻辑向量使用内存最有效的二元分类问题。
X = table2array(台);Y = adultdata。工资= =“< = 50 k”;XTest = table2array (tblTest);欧美=成人。工资= =“< = 50 k”;
软件使用一个定点数据类型的预测数据。因此,规范预测数据使定点数据类型更健壮的溢出和下溢。正常化也减少了所需的计算分数变换生成的查找表。
规范化的预测数据X
和XTest
。使用训练数据的平均值和标准偏差X
规范化的测试数据XTest
。
[X, C, S] = (X)正常化;XTest =正常化(XTest,“中心”C“规模”,年代);
训练一个分类树模型。指定最小数量的叶子节点观测(MinLeafSize
)和决策分歧的最大数量(MaxNumSplits
模型的),以减少内存占用。指定分对数
分数的转换。
Mdl = fitctree (X, Y,“重量”adultdata.fnlwgt,…“MinLeafSize”10“MaxNumSplits”,100,…“ScoreTransform”,分对数的);
Mdl
是一个ClassificationTree
模型。
计算分类错误的训练数据集和测试数据集。
损失(Mdl, X, Y)
ans = 0.1620
损失(Mdl XTest、欧美)
ans = 0.1683
训练数据的分类器分类大约16%和17%的测试数据。
保存模型
将分类模型保存到该文件myMdl.mat
通过使用saveLearnerForCoder
。
saveLearnerForCoder (Mdl“myMdl”);
定点数据类型定义
使用generateLearnerDataTypeFcn
生成一个函数,定义了定点预测所需的变量的数据类型。使用所有可用的预测数据获得现实的定点数据类型范围。
generateLearnerDataTypeFcn (“myMdl”,[X; XTest])
generateLearnerDataTypeFcn
生成myMdl_datatype
函数。
创建一个结构T
通过使用,定义了定点数据类型myMdl_datatype
。
T = myMdl_datatype (“固定”)
T =结构体字段:XDataType: [0 x0嵌入。fi] TransformedScoreDataType: [0x0 embedded.fi] ScoreDataType: [0x0 embedded.fi]
生成的查找表来近似分数转换
创建一个FunctionApproximation.TransformFunction
(定点设计师)对象通过指定这些输入:
前两个输入的输入都是相同的
generateLearnerDataTypeFcn
函数。第一个输入文件的名称,包含训练模型,和第二个输入是预测数据。第三个输入是通过调用生成的结构
myMdl_datatype
函数。
approxObj = FunctionApproximation.TransformFunction (“myMdl”[X; XTest], T)
approxObj = TransformFunction属性:问题:[1 x1 FunctionApproximation.ClassregProblem]
approxObj
有财产问题
,其中包含一个ClassregProblem
对象。显示问题
的属性approxObj
。
approxObj.Problem
ans = ClassregProblem属性:FunctionToApproximate: @ (x) (1. / (1 + exp (- x))) NumberOfInputs: 1 InputTypes: [1 x1嵌入。numerictype] InputLowerBounds: -3.5296 InputUpperBounds: 13.3944 OutputType: [1 x1嵌入。numerictype]选项:[1 x1 FunctionApproximation.Options]
的ClassregProblem
对象问题
属性包含信息从创建时输入您指定approxObj
。详情,请参阅FunctionApproximation.ClassregProblem
(定点设计师)参考页面。
输入你创建时指定的预测数据FunctionApproximation.TransformFunction
对象决定了范围InputLowerBounds
和InputUpperBounds
。如果两者之间的界限范围太大,生成的查找表可以耗费时间。在本例中,您标准化X
和缩放XTest
减少范围。
创建一个新的数据类型结构T_new
通过使用近似
(定点设计师)函数。
T_new =近似(approxObj)
T_new =结构体字段:XDataType: [0 x0嵌入。fi] TransformedScoreDataType: [0x0 embedded.fi] ScoreDataType: [0x0 embedded.fi] LookupTableFunction: '@myMdl_lookup'
近似
返回输出T_new
并生成的查找表的功能myMdl_lookup
。T_new
存储在包含所有的字段T
和一个额外的字段LookupTableFunction
,其中包含一个函数处理myMdl_lookup
。
定义入口点函数
定义一个入口点函数命名myFixedPointPredict
使用训练模型,预测分类标签和分数。
函数(标签,分数)= myFixedPointPredict (X, T)% # codegenMdl = loadLearnerForCoder (“myMdl”,“数据类型”T);(标签,分数)=预测(Mdl X);结束
生成代码
转换XTest
中指定的类型T_new.XDataType
通过使用投
(定点设计师)函数。
XTest_fx =投(XTest,“喜欢”,T_new.XDataType);
生成代码的入口点函数使用codegen
。而不是指定一个适应输入的预测数据集,指定一个固定大小的输入使用coder.typeof
。如果你知道预测数据集的大小,通过对所生成的代码,然后生成代码简单的固定大小的输入是可取的。
codegenmyFixedPointPredictarg游戏{coder.typeof (XTest_fx [1,5], [0]), coder.Constant (T_new)}
代码生成成功。
codegen
生成墨西哥人的功能myFixedPointPredict_mex
与平台相关的扩展。
验证生成的代码
通过测试数据集XTest
来预测
和myFixedPointPredict_mex
比较输出。
(标签、分数)=预测(Mdl XTest);n =大小(XTest, 1);labels_fx = true (n, 1);scores_fx = 0 (n, 2);为i = 1: n [labels_fx(我),scores_fx(我,:)]= myFixedPointPredict_mex (XTest_fx(我,:),T_new);结束
比较的输出预测
和myFixedPointPredict_mex
。
labels_fx verify_labels = isequal(标签)
verify_labels =逻辑0
isequal
返回逻辑0(假的),这意味着标签
和labels_fx
是不一样的。发现不匹配的标签。
idx =找到(labels_fx ~ =标签)
idx =2×14815 14114
墨西哥人函数返回相同的标签预测
函数除了两个样品XTest
。
找到之间的相对差异分数的最大输出。
relDiff_scores = max (abs((双(scores_fx(: 1)分数(:1))。/分数(:1)))
relDiff_scores = 0.0407
输入参数
文件名
- - - - - -MAT-file名称包含结构表示模型对象数组
特征向量|字符串标量
MATLAB格式化二进制文件的名称(MAT-file)包含结构数组代表一个模型对象,指定为一个特征向量或字符串标量。
你必须创建文件名
文件使用saveLearnerForCoder
和模型文件名
可以是下列之一:
分类模型
整体的决策树(
CompactClassificationEnsemble
,ClassificationBaggedEnsemble
)SVM(支万博1manbetx持向量机)(
CompactClassificationSVM
)
回归模型
支持向量机(
CompactRegressionSVM
)
的扩展文件名
文件必须.mat
。如果文件名
没有扩展呢generateLearnerDataTypeFcn
附加.mat
。
如果文件名
不包括一个完整的路径,然后呢generateLearnerDataTypeFcn
加载文件从当前文件夹。
例子:“myMdl”
数据类型:字符
|字符串
X
- - - - - -预测数据
数字矩阵
预测数据预测
存储在函数的模型文件名
指定为一个n——- - - - - -p数字矩阵,n是观察和的数量吗p是预测变量的数量。
数据类型:单
|双
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
R2021a之前,用逗号来分隔每一个名称和值,并附上的名字
在报价。
例子:generateLearnerDataTypeFcn(文件名,X,‘OutputFunctionName’,‘myDataTypeFcn’,‘字’,32)
生成一个数据类型函数命名myDataTypeFcn
使用32位的字长为每个变量在定义定点数据类型。
OutputFunctionName
- - - - - -生成函数的名称
文件名
+_datatype
(默认)|特征向量|字符串标量
生成的函数的名称,指定为逗号分隔组成的“OutputFunctionName”
和一个字符向量或字符串标量。的“OutputFunctionName”
值必须是一个有效的MATLAB函数名。
默认的文件名是函数名文件名
紧随其后的是_datatype
。例如,如果文件名
是myMdl
,那么默认的函数名myMdl_datatype
。
例子:“OutputFunctionName”、“myDataTypeFcn”
数据类型:字符
|字符串
OutputRange
- - - - - -范围的预测
输出
模拟的使用范围X
(默认)|数值向量的两个元素
输出参数的范围预测
函数,指定为逗号分隔组成的“OutputRange”
和一个数字向量的两个元素(输出的最小和最大值)。
的“OutputRange”
值指定的范围预测类分数分类模型和回归模型预测反应的范围。下表中列出的输出参数可以指定使用范围“OutputRange”
名称-值对的论点。
当X
包含了大量的观察和范围为输出参数,指定“OutputRange”
价值减少的数量计算。
如果你不指定“OutputRange”
值,然后使用预测软件模拟输出范围的数据X
和预测
函数。
软件确定数字,张成的空间定点数据可以表示通过“OutputRange”
价值和“PercentSafetyMargin”
价值。
例子:“OutputRange”, [0, 1]
数据类型:单
|双
PercentSafetyMargin
- - - - - -安全保证金比例
10(默认)|数字标量
安全保证金比例,指定为逗号分隔组成的“PercentSafetyMargin”
和一个数字标量。
对于每个变量,软件模拟变量的范围并添加指定的安全裕度来确定数字张成的空间定点数据可以表示。然后,软件提出了最大一部分长度,不会导致溢出。
当你指定要特别小心“PercentSafetyMargin”
价值。如果一个变量范围很大,增加安全裕度可以导致下溢,因为软件降低分数的长度代表更大范围使用给定单词的长度。
例子:“PercentSafetyMargin”, 15
数据类型:单
|双
更多关于
数据类型的函数
使用生成的数据类型的功能generateLearnerDataTypeFcn
创建一个结构,定义了定点所需的变量的数据类型生成预测的定点C / c++代码的机器学习模型。使用输出结构函数作为输入参数的数据类型T
的loadLearnerForCoder
。
如果文件名
是“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
下列表中包含的字段。这些字段定义变量的数据类型直接影响模型的精度。这些变量,以及其他命名和内部变量,必须运行预测
的函数模型。
描述 | 字段 |
---|---|
常见的领域分类 |
|
公共领域的回归 |
|
其他字段的决策树 |
|
其他字段的支持向量机 |
|
软件提出了最大一部分长度不会导致溢出,基于默认字长(16)和安全保证金(10%)为每一个变量。
下面的代码显示了数据类型的功能myMdl_datatype
,生成的generateLearnerDataTypeFcn
当文件名
是“myMdl”
和模型文件名
文件是一个支持向量机分类器。
函数T = myMdl_datatype (dt)如果输入参数个数< 1 dt =“固定”;结束%设置定点数学设置调频= fimath (“RoundingMethod”,“地板”,…“OverflowAction”,“包装”,…“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(经销)% x是预测数据的观察和sv支持向量万博1manbetxT。InnerProductDataType = fi([],真的,16 6调频,“数据类型”,dt);结束
提示
提高精度的定点生成的代码,您可以调整定点数据类型。通过更新修改定点数据类型数据类型的函数(
myMdl_datatype
)和创建一个新的结构,然后重新生成代码使用新的结构。你可以更新myMdl_datatype
函数两种方式中的一种:重新生成
myMdl_datatype
通过使用函数generateLearnerDataTypeFcn
和它的名称-值对参数。增加使用的单词长度
“字”
名称-值对的论点。减少使用的安全裕度
“PercentSafetyMargin”
名称-值对的论点。
如果你增加这个词长度或减少安全裕度,该软件可以提出一个分数长度更长,因此,提高精度的基于给定数据集生成的代码。
手动修改定点数据类型在函数文件(
myMdl_datatype.m
)。为每一个变量,您可以调整长度和长度和指定定点数学设置使用fimath
(定点设计师)对象。
定点代码生成,大量的操作或一个大变量范围可能导致丧失精度,而相应的精度浮点代码。当训练支持向量机模型,牢记下面的建议来避免损失精度的定点生成代码:
数据标准化(
“标准化”
)- - -为了避免溢出模型中属性值的支持向量的SVM模型,可以预测数据标准化。万博1manbetx而不是使用“标准化”
名称-值对参数当训练模型,规范之前预测数据通过数据拟合函数和预测
函数,以便定点代码不包括标准化的操作。内核函数(
“KernelFunction”
)- - -使用高斯内核或线性内核比使用一个多项式内核。一个多项式比其他内核,内核需要较高的计算复杂度和多项式核函数的输出是无界的。内核规模(
“KernelScale”
)- - -使用一个内核规模如果需要额外的操作“KernelScale”
不是1。看到下面成了一个分类问题的预测可能会丧失精度,如果预测类分数值有很大的范围。
您可以生成一个查找表,接近一个分数变换函数训练分类器的使用
FunctionApproximation.TransformFunction
(定点设计师)对象和它的功能近似
(定点设计师)。然后使用定点代码生成的查找表。这种方法需要较少的计算分数转换生成的代码比默认的方法,它使用CORDIC-based算法。因此,使用一个查找表收益率相对高速性能和内存需求相对较低。支持分数万博1manbetx转换功能包括“doublelogit”
,分对数的
,“symmetriclogit”
。例如,看到的使用查找表来近似分数转换。(因为R2023a)
版本历史
介绍了R2019bR2023a:使用一个查找表,接近得分转换函数分类器
您可以生成一个查找表,接近一个分数变换函数训练分类器,然后用定点代码生成的查找表。这种方法需要较少的计算分数转换生成的代码比默认的方法,它使用CORDIC-based算法。因此,使用一个查找表收益率相对高速性能和内存需求相对较低。
在创建一个定点数据类型结构使用生成的函数generateLearnerDataTypeFcn
,更新结构包括查找表使用FunctionApproximation.TransformFunction
(定点设计师)对象和它的功能近似
(定点设计师)。支持分数万博1manbetx转换功能包括“doublelogit”
,分对数的
,“symmetriclogit”
。例如,看到的使用查找表来近似分数转换。
R2020a:指定精度转换前后的成绩转换
在R2019b,您可以训练SVM分类器的定点代码生成一些默认的分数转换(“ismax”
,“标志”
,“对称”
,或“symmetricismax”
)。的generateLearnerDataTypeFcn
函数生成一个数据类型函数的输出结构只包含一个字段相关的分数,ScoreDataType
。这个领域影响输出的精确分数前后转换。
从R2020a开始,当你训练一个支持向量机分类器除了得分变换“没有”
或“身份”
,generateLearnerDataTypeFcn
函数生成一个数据类型函数的输出结构T
包含两个字段相关的分数:ScoreDataType
和TransformedScoreDataType
。使用这些字段来影响输出的精确分数之前和之后他们的变换,分别。更多细节,请参阅数据类型的函数。
更新你的代码,重新运行generateLearnerDataTypeFcn
函数,然后重新生成输出结构T
。
另请参阅
loadLearnerForCoder
|saveLearnerForCoder
|buildInstrumentedMex
(定点设计师)|showInstrumentationResults
(定点设计师)|codegen
(MATLAB编码器)|fi
(定点设计师)
主题
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。