主要内容

检查自定义层有效性

如果你创建一个自定义的深度学习层,那么你可以使用核对层函数检查层是否有效。该函数检查层的有效性、GPU兼容性、正确定义的渐变和代码生成兼容性。要检查层是否有效,请运行以下命令:

检查层(层,有效输入大小,'ObservationDimension',尺寸)
哪里是该层的一个实例,validInputSize是指定到图层的有效输入大小的矢量或单元格数组昏暗的指定图层输入数据中的观察的维度。对于大输入大小,渐变检查需要更长时间运行。要加快测试,请指定较小的有效输入大小。

检查图层有效性

检查示例自定义层的有效性前奏者

定义自定义proLu层。要创建此图层,请保存文件预演者在当前文件夹中。

创建一个层的实例,并检查它是否有效使用核对层。将有效输入大小设置为层的单个观测输入的典型大小。对于单个输入,层期望的观测值大小为h——- - - - - -w——- - - - - -c哪里hw, 和c分别是前一层输出的通道的高度、宽度和数量。

具体说明validInputSize作为输入数组的典型大小。

层=预铺层(20,'prelu');validInputSize = [5 5 20];CheckLayer(图层,ValidInputSize)
跳过multi-observation测试。要启用带有多个观察的测试,请指定“ObservationDimension”选项。对于2d图像数据,将“ObservationDimension”设置为4。对于3-D图像数据,将“ObservationDimension”设置为5。对于序列数据,设置'ObservationDimension'为2。跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。运行nnet.checklayer.TestLayerWithoutBackward  ......... Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 9 Passed, 0 Failed, 0 Incomplete, 13 Skipped. Time elapsed: 0.14162 seconds.

结果显示通过、失败和跳过测试的数量。如果不指定“观察维度”选项,或没有GPU,则该功能跳过相应的测试。

检查多个观测

对于多观察输入,该层预计尺寸的观察阵列h——- - - - - -w——- - - - - -c——- - - - - -N哪里hw, 和c分别是通道的高度、宽度和数量,以及N为观察次数。

要检查多个观察的图层有效性,请指定观察和设置的典型大小'观察树'4。

层=预铺层(20,'prelu');validInputSize = [5 5 20];CheckLayer(图层,validInputSize,'观察树'4)
跳过GPU测试。找不到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。正在运行nnet.checklayer.TestLayerWithoutBackward。。。完成nnet.checklayer.TestLayerWithoutBackward测试摘要:13通过,0失败,0不完整,9跳过。所用时间:0.064861秒。

在这种情况下,该功能不会检测到图层的任何问题。

测试清单

核对层函数通过执行一系列测试来检查自定义层的有效性。

中间层

核对层函数使用这些测试检查自定义中间层(类型为nnet.layer.layer)。

测试 描述
函数yntaxesarecorrect. 层函数的语法定义正确。
predictdoesnoterror. 预测没有错误。
我不害怕

当指定时,向前没有错误。

ForwardPredictareConsistentInsize.

向前指定了,向前预测相同大小的输出值。

落后并不可怕 当指定时,落后没有错误。
后胸痛

落后如果指定,则落后大小一致:

  • 对每个输入的导数大小与相应的输入相同。

  • 关于每个学习参数的衍生物与相应的学习参数相同。

PredictisConsistentType

的输出预测与输入的类型一致。

原isconsistentintype.

向前如果指定,则向前与输入的类型一致。

backwardIsConsistentInType

落后如果指定,则落后与输入的类型一致。

gradientsAreNumericallyCorrect 落后指定时,在中计算的渐变落后与数值梯度保持一致。
BackwardPropagationDoesNotError. 落后若未指定,则可使用自动微分计算导数。
代码genpragmadefinedinclassdef 布拉格马“%#codegen”用于代码生成在类文件中指定。
checkFor金宝appSupportedLayerPropertiesForCodegen 图层特性支持代码生成。金宝app
predictIsValidForCodeGeneration 预测对于代码生成有效。

测试PredictisConsistentType原isconsistentintype., 和backwardIsConsistentInType还要检查GPU兼容性。要在GPU上执行层函数,函数必须支持类型为的输入和输出金宝appgpuArray使用底层数据类型仅有一个的

输出层

核对层函数使用这些测试来检查自定义输出图层的有效性(类型类型nnet.layer.ClassificationLayernnet.layer.RegressionLayer)。

测试 描述
forwardLossDoesNotError forwardloss.没有错误。
后向损失不可怕 backwardLoss没有错误。
forwardLossIsScalar 的输出forwardloss.是标量。
反向沃索斯审查istentinsize. backwardLoss时,输出backwardLoss尺寸一致:德迪与预测的尺寸相同Y
正向损失一致性类型

的输出forwardloss.类型一致:丧失和预测的类型一样吗Y

backwardLossIsConsistentInType

backwardLoss时,输出backwardLoss类型一致:德迪必须与预测的类型相同Y

gradientsAreNumericallyCorrect backwardLoss指定时,在中计算的渐变backwardLoss数字是正确的。
BackwardPropagationDoesNotError. backwardLoss若未指定,则可使用自动微分计算导数。

正向损失一致性类型backwardLossIsConsistentInType测试还检查GPU兼容性。要在GPU上执行层函数,函数必须支持类型为的输入和输出金宝appgpuArray使用底层数据类型仅有一个的

生成数据

检查图层有效性,核对层函数根据图层类型生成数据:

层类型 生成数据描述
中间 取值范围[-1,1]
回归输出 [-1,1]范围内的预测和目标
分类输出

预测值在[0,1]范围内。

如果您指定了'观察树'选项,则目标是一个热点编码的向量(向量包含一个1,其他地方包含0)。

如果不指定'观察树'选项,然后目标是范围内的值[0,1]。

要检查多个观察,请使用该观察维度指定观察维度'观察树'名称值对。如果指定观察维度,那么核对层函数使用大小为1和2的小批量生成的数据检查图层函数是否有效。如果未指定此名称-值对,则函数将跳过检查图层函数是否对多个观测有效的测试。

诊断学

如果在使用时测试失败核对层,然后该函数提供测试诊断和框架诊断。测试诊断突出显示层中发现的任何问题。框架诊断提供了更详细的信息。

函数语法

测试函数yntaxesarecorrect.检查图层函数是否具有正确定义的语法。

测试诊断 描述 可能的解决方案
图层中“predict”的输入参数数量不正确 的语法预测功能与层输入的数量不一致。

在中指定正确数量的输入和输出参数预测

的语法预测(Z1,…,Zm评选)=预测(层,X1,…,Xn)哪里X1,…,Xnn层输入和z1,...,zm层输出。的值n必须对应于NumInputsNumOutputs层的属性。

提示

如果输入的数量预测可以变化,然后使用瓦拉金而不是X1,…,Xn.在这种情况下,瓦拉金是输入的单元格数组,其中变长度输入宗量{我}对应于.如果输出的数量可以变化,则使用varargout.而不是z1,...,zm.在这种情况下,varargout.输出的单元格数组在哪里varargout {j}对应于Zj

提示

如果自定义层有dlnetwork对象,然后在预测自定义层的功能,使用预测功能dlnetwork. 使用dlnetwork对象预测功能确保软件使用正确的层操作进行预测。

在图层中“预测”的输出参数的数量不正确 的语法预测功能与层输出的数量不一致。
层中“forward”的输入参数数量不正确 可选的语法向前功能与层输入的数量不一致。

在中指定正确数量的输入和输出参数向前

的语法向前[Z1,…,Zm,内存]=前向(层,X1,…,Xn)哪里X1,…,Xnn层输入,z1,...,zm图层输出,和记忆力是该层的内存。

提示

如果输入的数量向前可以变化,然后使用瓦拉金而不是X1,…,Xn.在这种情况下,瓦拉金是输入的单元格数组,其中变长度输入宗量{我}对应于.如果输出的数量可以变化,则使用varargout.而不是z1,...,zm.在这种情况下,varargout.输出的单元格数组在哪里varargout {j}对应于Zj为了j= 1,…,NumOutputsvarargout{NumOutputs+1}对应于记忆力

提示

如果自定义层有dlnetwork对象,然后在向前自定义层的功能,使用向前的函数dlnetwork对象使用dlnetwork对象向前功能保证了软件使用正确的层操作进行培训。

层中“forward”的输出参数数目不正确 可选的语法向前功能与层输出的数量不一致。
图层中“向后”的输入参数数量不正确 可选的语法落后功能与层输入和输出的数量不一致。

在中指定正确数量的输入和输出参数落后

的语法落后[DLDX1,...,DLDXN,DLDW1,...,DLDWK] =向后(图层,X1,...,XN,Z1,...,ZM,DLDZ1,...,DLDZM,内存),其中:

  • X1,…,Xnn层的输入

  • z1,...,zm输出层forward函数

  • dLdZ1,…,dLdZm渐变是否从下一层向后传播

  • 记忆力内存输出是向前如果向前定义,否则,记忆力[]

的输出,dLdX1,…,dLdXn损耗对层输入和的导数是多少dLdW1,…,dLdWk是损失的衍生品,与k可学的参数。为了防止在前向传递和后向传递之间保存未使用的变量,从而减少内存使用,可以将相应的输入参数替换为

提示

如果输入的数量落后可以变化,然后使用瓦拉金而不是之后的输入参数.在这种情况下,瓦拉金是输入的单元格数组,其中变长度输入宗量{我}对应于为了=1,…,NumInputsvarargin{NumInputs+j}varargin{NumInputs+NumOutputs+j}相当于Zjdldzj.,分别为j=1,…,NumOutputs, 和变长度输入宗量{结束}对应于记忆力

如果输出的数量可以变化,则使用varargout.而不是输出参数。在本例中,varargout.输出的单元格数组在哪里varargout{我}对应于dLdXi为了=1,…,NumInputsvarargout {numinputs + t}对应于DLDWT.为了t=1,…,k哪里k是可学习参数的数目。

提示

如果层前向功能支持金宝appdlarray.对象,则软件会自动确定向后函数,而无需指定落后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

层中“向后”的输出参数数目不正确 可选的语法落后功能与层输出的数量不一致。

对于具有多个输入或输出的图层,必须设置图层特性的值NumInputs(或者,输入名称)及NumOutputs(或者,OutputNames)分别在层构造函数中。

多重观察

核对层功能检查图层函数是否有效,可用于单个和多个观察。要检查多个观察,请使用该观察维度指定观察维度'观察树'名称值对。如果指定观察维度,那么核对层函数使用大小为1和2的小批量生成的数据检查图层函数是否有效。如果未指定此名称-值对,则函数将跳过检查图层函数是否对多个观测有效的测试。

测试诊断 描述 可能的解决方案
跳过multi-observation测试。要启用带有多个观察的检查,请在checkLayer中指定'ObservationDimension'参数 如果不指定'观察树'参数核对层然后,该功能跳过测试以多个观察数据检查数据。

使用命令检查层(层,有效输入大小,'ObservationDimension',尺寸)哪里是自定义图层的实例,validInputSize是一个向量,用于指定层的有效输入大小,以及昏暗的指定图层输入中的观察的维度。

有关更多信息,请参见层输入大小

函数不会出错

这些测试检查层在传递有效大小的输入数据时是否出错。

中间层。测试predictdoesnoterror.我不害怕, 和落后并不可怕检查层函数在传递有效大小的输入时是否出错。如果指定观察标注,则该函数将检查图层的单个观察和多个观察。

测试诊断 描述 可能的解决方案
函数“predict”引发错误: 预测当传递大小数据时,函数错误validInputSize

解决中描述的错误框架的诊断部分。

提示

如果层前向功能支持金宝appdlarray.对象,则软件会自动确定向后函数,而无需指定落后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

forward函数抛出了一个错误: 可选的向前当传递大小数据时,函数错误validInputSize
函数“backward”引发了一个错误: 可选的落后函数错误时传递的输出预测

输出层。测试forwardLossDoesNotError后向损失不可怕检查层函数在传递有效大小的输入时是否出错。如果指定观察标注,则该函数将检查图层的单个观察和多个观察。

测试诊断 描述 可能的解决方案
函数“forwardLoss”引发错误: forwardloss.当传递大小数据时,函数错误validInputSize

解决中描述的错误框架的诊断部分。

提示

如果是forwardloss.功能支持金宝appdlarray.对象,则软件自动确定向后损失功能,您不需要指定backwardLoss函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

函数“BackardLoss”引发错误: 可选的backwardLoss当传递大小数据时,函数错误validInputSize

输出大小一致

这些测试检查层函数输出的大小是否一致。

中间层。测试后胸痛检查落后函数输出正确大小的导数。

的语法落后[DLDX1,...,DLDXN,DLDW1,...,DLDWK] =向后(图层,X1,...,XN,Z1,...,ZM,DLDZ1,...,DLDZM,内存),其中:

  • X1,…,Xnn层的输入

  • z1,...,zm输出层forward函数

  • dLdZ1,…,dLdZm渐变是否从下一层向后传播

  • 记忆力内存输出是向前如果向前定义,否则,记忆力[]

的输出,dLdX1,…,dLdXn损耗对层输入和的导数是多少dLdW1,…,dLdWk是损失的衍生品,与k可学的参数。为了防止在前向传递和后向传递之间保存未使用的变量,从而减少内存使用,可以将相应的输入参数替换为

提示

如果输入的数量落后可以变化,然后使用瓦拉金而不是之后的输入参数.在这种情况下,瓦拉金是输入的单元格数组,其中变长度输入宗量{我}对应于为了=1,…,NumInputsvarargin{NumInputs+j}varargin{NumInputs+NumOutputs+j}相当于Zjdldzj.,分别为j=1,…,NumOutputs, 和变长度输入宗量{结束}对应于记忆力

如果输出的数量可以变化,则使用varargout.而不是输出参数。在本例中,varargout.输出的单元格数组在哪里varargout{我}对应于dLdXi为了=1,…,NumInputsvarargout {numinputs + t}对应于DLDWT.为了t=1,…,k哪里k是可学习参数的数目。

衍生品DLDX1.,......,dLdXn必须与相应的层输入的大小相同,并且dLdW1,…,dLdWk必须与相应的可学习参数大小相同。对于具有单个和多个观测值的输入数据,大小必须一致。

测试诊断 描述 可能的解决方案
“向后”的“dLdX”大小不正确 损失对层输入的导数必须与相应层输入的大小相同。

返回衍生品dLdX1,…,dLdXn与相应层输入的大小相同X1,…,Xn

“反向”输入“in1”的损失导数大小不正确
从'forward'返回的'Z'大小必须与'predict'相同 的输出预测必须与对应的输出相同大小向前

返回输出z1,...,zm属于预测与相应输出的大小相同z1,...,zm属于向前

“反向”损失相对于“W”的导数大小不正确 关于可学习参数的损失的衍生物必须与相应的学习参数相同。

返回衍生品dLdW1,…,dLdWk与相应的可学习参数大小相同W1,…,Wk

提示

如果层前向功能支持金宝appdlarray.对象,则软件会自动确定向后函数,而无需指定落后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

输出层。测试forwardLossIsScalar检查forwardloss.函数是标量。当。。。的时候backwardLoss如果指定了函数,则测试反向沃索斯审查istentinsize.检查forwardloss.backwardLoss尺寸正确。

的语法forwardloss.loss = forwardLoss(layer, Y, T).输入Y与网络做出的预测相对应。这些预测是前一层的输出。输入T与培训目标相对应。输出丧失是之间的损失YT根据指定的损失函数。输出丧失必须是标量。

如果是forwardloss.功能支持金宝appdlarray.对象,则软件自动确定向后损失功能,您不需要指定backwardLoss函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

的语法backwardLossdLdY=后向损失(层,Y,T).输入Y包含网络所做的预测,以及T包含培训目标。输出德迪损失相对于预测的导数是多少Y.输出德迪必须与图层输入的大小相同Y

测试诊断 描述 可能的解决方案
“远期损失”的“损失”大小不正确 输出丧失属于forwardloss.必须是标量。

返回输出丧失作为一个标量。例如,如果您有多个值的损失,那么您可以使用的意思是总和

'反向升降'的损失'DLDY'的衍生物的衍生物的规模不正确 backwardLoss时,损耗对层输入的导数必须与层输入的大小相同。

返回衍生物德迪与图层输入的大小相同Y

如果是forwardloss.功能支持金宝appdlarray.对象,则软件自动确定向后损失功能,您不需要指定backwardLoss函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

数据类型和GPU兼容性一致

这些测试检查层函数输出的类型是否一致,以及层函数是否与GPU兼容。

如果层转发功能完全支持金宝appdlarray.对象,则该层是GPU兼容的。否则,为了与GPU兼容,层函数必须支持输入和返回输出类型金宝appgpuArray(并行计算工具箱)

许多MATLAB®内置函数支持金宝appgpuArray(并行计算工具箱)dlarray.输入参数。有关支持的函数的列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app.有关在GPU上执行的函数列表,请参见在GPU上运行MATLAB函数(并行计算工具箱)要使用GPU进行深度学习,您还必须有支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱)有关在MATLAB中使用GPU的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱)

中间层。测试PredictisConsistentType原isconsistentintype., 和backwardIsConsistentInType检查图层功能输出变量的数据类型是否正确。当给定数据类型的输入时,测试检查层函数是否返回一致的数据类型仅有一个的双重的, 和gpuArray用底层类型仅有一个的双重的

提示

如果使用函数预分配数组,例如0,则必须确保这些数组的数据类型与层函数输入一致。要创建与另一个数组具有相同数据类型的零数组,请使用“喜欢”选择0.例如,初始化一个大小为零的数组深圳与数组相同的数据类型X使用Z=零(sz,'like',X)

测试诊断 描述 可能的解决方案
“预测”的“Z”类型不正确 输出的类型z1,...,zm预测功能必须与输入一致X1,…,Xn

返回输出z1,...,zm与输入的类型相同X1,…,Xn

“预测”的输出类型不正确
'转发'的“z”类型不正确 输出的类型z1,...,zm任择议定书向前功能必须与输入一致X1,…,Xn
“正向”的输出“out1”类型不正确
“向后”的“dLdX”类型不正确 衍生物的类型dLdX1,…,dLdXn任择议定书落后功能必须与输入一致X1,…,Xn

返回衍生品dLdX1,…,dLdXn与输入的类型相同X1,…,Xn

与输入“in1”有关的“向后”损失导数类型不正确
关于'向后'W'的损失的衍生类型不正确的类型 可学习参数损失导数的类型必须与相应的可学习参数一致。

对于每个可学习参数,返回与相应可学习参数类型相同的导数。

提示

如果层前向功能支持金宝appdlarray.对象,则软件会自动确定向后函数,而无需指定落后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

输出层。测试正向损失一致性类型backwardLossIsConsistentInType检查该层函数输出的数据类型是否正确。当给定数据类型输入时,测试检查各层是否返回一致的数据类型仅有一个的双重的, 和gpuArray用底层类型仅有一个的双重的

测试诊断 描述 可能的解决方案
“forwardLoss”的“loss”类型不正确 输出的类型丧失forwardloss.函数必须与输入保持一致Y

返回丧失与输入的类型相同Y

损失“dLdY”的衍生工具类型不正确,用于“反向损失” 输出的类型德迪任择议定书backwardLoss函数必须与输入保持一致Y

返回德迪与输入的类型相同Y

提示

如果是forwardloss.功能支持金宝appdlarray.对象,则软件自动确定向后损失功能,您不需要指定backwardLoss函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

校正梯度

测试gradientsAreNumericallyCorrect检查由层函数计算的梯度数值是否正确。测试BackwardPropagationDoesNotError.检查衍生品是否可以使用自动微分来计算。

中间层。当可选时落后未指定函数,则测试失败BackwardPropagationDoesNotError.检查衍生品是否可以使用自动微分来计算。当可选时落后如果指定了函数,则测试gradientsAreNumericallyCorrect用于计算梯度的测试落后数字是正确的。

测试诊断 描述 可能的解决方案
应为没有维度标签的dlarray,但找到了标签 当可选时落后函数未指定时,层转发函数必须输出dlarray.没有标注标签的对象。 确保任何dlarray.在层转发函数中创建的对象不包含维度标签。
无法通过图层反向传播。检查“向前”功能是否完全支持自动区分。金宝app或者,手动实现'backward'函数

以下一项或多项:

  • 当可选时落后未指定函数,层转发函数不支持金宝appdlarray.对象。

  • 当可选时落后未指定函数,则跟踪输入dlarray.forward函数中的对象被破坏了。例如,通过使用提取数据函数。

检查前进功能是否支持金宝appdlarray.对象。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

检查输入的导数dlarray.物体可以被追踪。要了解有关的导数轨迹的更多信息dlarray.对象,看到导数的跟踪

或者,通过创建名为落后.想要了解更多,请看向后函数

无法通过图层反向传播。检查“predict”功能是否完全支持自动区分。金宝app或者,手动实现'backward'函数
‘backward’的导数‘dLdX’与数值梯度不一致

以下一项或多项:

  • 当可选时落后函数,则导数计算不正确

  • 在某些输入点处,前向功能在某些输入点处是不可差异的

  • 误差容忍度太小

如果层前向功能支持金宝appdlarray.对象,然后软件自动确定向后函数,您可以省略向后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

检查导数是否正确落后计算正确。

如果导数计算正确,那么框架的诊断节中,手动检查导数的实际值与期望值之间的绝对误差和相对误差。

如果绝对和相对误差在公差的可接受范围内,则可以忽略此测试诊断。

关于“落后”的输入'In1'丢失的导数与数值梯度不一致
“向后”的损失对“W”的导数与数值梯度不一致

提示

如果层前向功能支持金宝appdlarray.对象,则软件会自动确定向后函数,而无需指定落后函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

输出层。当可选时backwardLoss未指定函数,则测试失败BackwardPropagationDoesNotError.检查衍生品是否可以使用自动微分来计算。当可选时backwardLoss如果指定了函数,则测试gradientsAreNumericallyCorrect用于计算梯度的测试backwardLoss数字是正确的。

测试诊断 描述 可能的解决方案
应为没有维度标签的dlarray,但找到了标签 当可选时backwardLoss功能未指定,forwardloss.函数必须输出dlarray.没有标注标签的对象。 确保任何dlarray.在中创建的对象forwardloss.函数不包含标注标签。
无法通过图层反向传播。检查“forwardLoss”功能是否完全支持自动区分。金宝app或者,手动实现'backwardLoss'功能

以下一项或多项:

  • 当可选时backwardLoss函数未指定时,该层forwardloss.函数不支持金宝appdlarray.对象。

  • 当可选时backwardLoss未指定函数,则跟踪输入dlarray.对象在forwardloss.功能已经损坏。例如,通过使用提取数据函数。

检查forwardloss.功能支持金宝appdlarray.对象。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

检查输入的导数dlarray.物体可以被追踪。要了解有关的导数轨迹的更多信息dlarray.对象,看到导数的跟踪

或者,通过创建名为backwardLoss.想要了解更多,请看损失函数

'反向升降机'的衍生物'DLDY'与数值梯度不一致

以下一项或多项:

  • 关于预测的导数Y计算不正确

  • 函数在某些输入点是不可微的

  • 误差容忍度太小

检查导数是否正确backwardLoss计算正确。

如果导数计算正确,那么框架的诊断节中,手动检查导数的实际值与期望值之间的绝对误差和相对误差。

如果绝对和相对误差在公差的可接受范围内,则可以忽略此测试诊断。

提示

如果是forwardloss.功能支持金宝appdlarray.对象,则软件自动确定向后损失功能,您不需要指定backwardLoss函数。获取支持的函数列表金宝appdlarray.对象,看到支持dlarray的函数列表金宝app

代码生成兼容性

如果你设定“CheckCodegenCompatibility”选项符合事实的,然后核对层函数检查层的代码生成兼容性。

测试代码genpragmadefinedinclassdef检查层定义是否包含代码生成提示%#编码基因.测试checkFor金宝appSupportedLayerPropertiesForCodegen检查图层属性是否支持代码生成。测试金宝apppredictIsValidForCodegeneration检查预测尺寸和批尺寸一致。

代码生成仅支持具有2-D图像输入金宝app的中间层。

测试诊断 描述 可能的解决方案
在自定义层的类定义中指定'%#codegen' 层定义不包括pragma“%#codegen”代码生成。

添加%#编码基因指令(或pragma)到您的图层定义,以指示您打算为此图层生成代码。添加此指令指示MATLAB代码分析器帮助您诊断和修复代码生成中导致错误的违规。

Nonscalar层属性必须是自定义层的类型单个或双或字符数组 该层包含除单数组、双数组或字符数组以外类型的非标量特性。

将非标量特性转换为使用single、double或character array类型的表示形式。

例如,将类别数组转换为整数类型数组双重的代表类别。

标量图层属性必须是自定义图层的数字,逻辑或字符串 图层包含除数字、逻辑或字符串以外的类型的标量属性。

将标量属性转换为使用数字表示形式,或逻辑或字符串类型的表示形式。

例如,将分类标量转换为类型为的整数双重的代表类别。

对于代码生成,“Z”的维数必须与图层输入的维数相同

输出的维度数Z属于预测与图层输入的尺寸数不匹配。

预测函数,返回与图层输入相同数量的尺寸的输出。

对于代码生成,“Z”必须与层输入具有相同的批大小

输出的批大小Z属于预测与层输入的批量大小不匹配。

预测函数,返回批次大小作为层输入的输出。

另请参阅

|

相关话题