主要内容

检查自定义层有效性

如果您创建了自定义深度学习层,则可以使用checkLayer函数检查该层是否有效。该函数检查层的有效性、GPU兼容性、正确定义的梯度和代码生成兼容性。使用实例检查某层是否有效。

validInputSize checkLayer(层)
在哪里是层的实例,validInputSize指定层的有效输入大小的向量或单元格数组。要检查多个观察结果,请使用ObservationDimension选择。要检查代码生成兼容性,请设置CheckCodegenCompatibility选项1(真正的)。对于大的输入大小,梯度检查需要更长的时间运行。若要加快测试速度,请指定较小的有效输入大小。

检查自定义层有效性

检查示例自定义层的有效性preluLayer

自定义层preluLayer,作为支持文件附在此示例后面,它对输入数据应用PReLU操作。金宝app要访问此层,请将此示例作为活动脚本打开。

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

指定validInputSize作为输入数组的典型大小。

图层= preluLayer(20);validInputSize = [5 5 20];validInputSize checkLayer(层)
跳过多观察测试。要启用带有多个观测值的测试,请指定“ObservationDimension”选项。对于二维图像数据,将‘ObservationDimension’设置为4。对于3d图像数据,将“ObservationDimension”设置为5。对于序列数据,将“ObservationDimension”设置为2。跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定'CheckCodegenCompatibility'和'ObservationDimension'选项。运行nnet.checklayer.TestLayerWithoutBackward .......... .. Done nnet.checklayer.TestLayerWithoutBackward __________ Test Summary: 12 Passed, 0 Failed, 0 Incomplete, 16 Skipped. Time elapsed: 0.18741 seconds.

结果显示通过、失败和跳过测试的数量。如果没有指定ObservationsDimension选项,或没有GPU,则该功能将跳过相应的测试。

检查多个观察结果

对于多观测输入,该层期望一个大小的观测数组h——- - - - - -w——- - - - - -c——- - - - - -N,在那里hw,c通道的高度、宽度和数量是否分别为和N是观测的数量。

若要检查多个观测值的层有效性,请指定一个观测值的典型大小并设置ObservationDimension选项4。

图层= preluLayer(20);validInputSize = [5 5 20];checkLayer(层、validInputSize ObservationDimension = 4)
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定'CheckCodegenCompatibility'和'ObservationDimension'选项。运行nnet.checklayer.TestLayerWithoutBackward .......... ........完成nnet.checklayer.TestLayerWithoutBackward __________测试总结:18通过,0失败,0不完整,10跳过。时间流逝:0.19972秒。

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

测试列表

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

中间的层

checkLayer函数使用这些测试检查自定义中间层(类型的层)的有效性nnet.layer.Layer).

测试 描述
functionSyntaxesAreCorrect 正确定义了层函数的语法。
predictDoesNotError 预测函数不会出错。
forwardDoesNotError

当指定时,向前函数不会出错。

forwardPredictAreConsistentInSize

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

backwardDoesNotError 当指定时,落后的不会出错。
backwardIsConsistentInSize

落后的的输出落后的大小一致:

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

  • 每个可学习参数的导数与相应的可学习参数的大小相同。

predictIsConsistentInType

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

forwardIsConsistentInType

向前的输出向前与输入的类型一致。

backwardIsConsistentInType

落后的的输出落后的与输入的类型一致。

gradientsAreNumericallyCorrect 落后的指定后,在落后的与数值梯度一致。
backwardPropagationDoesNotError 落后的未指定时,可使用自动微分计算导数。
predictReturnsValidStates 对于具有状态属性的层,预测函数返回有效状态。
forwardReturnsValidStates 对于具有状态属性的层,向前函数,如果指定,则返回有效状态。
resetStateDoesNotError 对于具有状态属性的层,resetState函数,如果指定,则不会出错并将状态重置为有效状态。
codegenPragmaDefinedInClassDef 的编译指示“% # codegen”用于在类文件中指定代码生成。
checkFor金宝appSupportedLayerPropertiesForCodegen 层属性支持代码生成。金宝app
predictIsValidForCodeGeneration 预测对代码生成有效。
doesNotHaveStateProperties 对于代码生成,该层没有状态属性。
金宝appsupportedFunctionLayer 对于代码生成,层不是FunctionLayer对象。

有些测试会运行多次。这些测试还检查不同的数据类型和GPU兼容性:

  • predictIsConsistentInType

  • forwardIsConsistentInType

  • backwardIsConsistentInType

要在GPU上执行层函数,函数必须支持类型的输入和输出金宝appgpuArray使用底层数据类型

输出层

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

测试 描述
forwardLossDoesNotError forwardLoss不会出错。
backwardLossDoesNotError backwardLoss不会出错。
forwardLossIsScalar 的输出forwardLoss是标量。
backwardLossIsConsistentInSize backwardLoss的输出backwardLoss大小一致:dLdY和预测的大小一样吗Y
forwardLossIsConsistentInType

的输出forwardLoss类型一致的:损失和预测的是同一类型吗Y

backwardLossIsConsistentInType

backwardLoss的输出backwardLoss类型一致的:dLdY一定和预测的一样吗Y

gradientsAreNumericallyCorrect backwardLoss指定后,在backwardLoss都是正确的。
backwardPropagationDoesNotError backwardLoss未指定时,可使用自动微分计算导数。

forwardLossIsConsistentInType而且backwardLossIsConsistentInType测试还检查GPU兼容性。要在GPU上执行层函数,函数必须支持类型的输入和输出金宝appgpuArray使用底层数据类型

生成的数据

要检查层的有效性,使用checkLayer函数根据层的类型生成数据:

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

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

如果您指定ObservationDimension选项,则目标是单热编码的向量(包含单个1和其他地方的0的向量)。

如果没有指定ObservationDimension选项,则目标是范围[0,1]中的值。

要检查多个观测值,请使用ObservationDimension选择。如果指定了观测维度,则checkLayer函数使用大小为1和2的迷你批生成的数据检查层函数是否有效。如果未指定此名称-值对,则该函数将跳过检查层函数是否对多个观察值有效的测试。

诊断

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

功能语法

测试functionSyntaxesAreCorrect检查层函数是否正确定义了语法。

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

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

预测函数语法取决于层的类型。

  • Z = predict(图层,X)转发输入数据X通过层并输出结果Z,在那里只有一个输入,一个输出。

  • [Z,状态]=预测(层,X)还输出更新后的状态参数状态,在那里只有一个状态参数。

您可以调整具有多个输入,多个输出或多个状态参数的层的语法:

  • 对于有多个输入的层,替换XX1,…,XN,在那里N是输入的数量。的NumInputs属性必须匹配N

  • 对于有多个输出的层,替换ZZ1,…,ZM评选,在那里是输出的数量。的NumOutputs属性必须匹配

  • 对于具有多个状态参数的层,替换状态state1,…,stateK,在那里K是状态参数的个数。

提示

如果层的输入数量可以变化,那么使用变长度输入宗量而不是X1,…,XN.在这种情况下,变长度输入宗量是单元格数组的输入,在哪里变长度输入宗量{我}对应于西

如果输出的数量可以变化,那么使用varargout而不是Z1,…,锌.在这种情况下,varargout是单元格数组的输出,在哪里varargout {j}对应于Zj

提示

如果自定义层有dlnetwork对象获取可学习参数,然后在预测函数的自定义层,使用预测函数为dlnetwork.使用dlnetwork对象预测功能确保软件使用正确的层操作进行预测。

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

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

向前函数语法取决于层的类型:

  • Z =向前(层,X)转发输入数据X通过层并输出结果Z,在那里只有一个输入,一个输出。

  • [Z,状态]= forward(层,X)还输出更新后的状态参数状态,在那里只有一个状态参数。

  • [__,memory] = forward(layer,X)还返回自定义的内存值落后的函数使用前面的任何语法。如果该层同时有一个自定义向前函数和自定义落后的函数,则forward函数必须返回一个内存值。

您可以调整具有多个输入,多个输出或多个状态参数的层的语法:

  • 对于有多个输入的层,替换XX1,…,XN,在那里N是输入的数量。的NumInputs属性必须匹配N

  • 对于有多个输出的层,替换ZZ1,…,ZM评选,在那里是输出的数量。的NumOutputs属性必须匹配

  • 对于具有多个状态参数的层,替换状态state1,…,stateK,在那里K是状态参数的个数。

提示

如果层的输入数量可以变化,那么使用变长度输入宗量而不是X1,…,XN.在这种情况下,变长度输入宗量是单元格数组的输入,在哪里变长度输入宗量{我}对应于西

如果输出的数量可以变化,那么使用varargout而不是Z1,…,锌.在这种情况下,varargout是单元格数组的输出,在哪里varargout {j}对应于Zj

提示

如果自定义层有dlnetwork对象获取可学习参数,然后在向前函数的自定义层,使用向前的功能dlnetwork对象。使用dlnetwork对象向前功能确保软件使用正确的层操作进行训练。

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

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

落后的函数语法取决于层的类型。

  • dLdX =向后(层,X,Z,dLdZ,内存)返回导数dLdX相对于层输入的损失,其中只有一个输入和一个输出。Z对应正向函数输出和dLdZ对应于损失对的导数Z.函数输入内存对应于正向函数的内存输出。

  • [dLdX,dLdW] = backward(层,X,Z,dLdZ,内存)也返回导数dLdW关于可学习参数的损失,其中只有一个可学习参数。

  • [dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)也返回导数dLdSin对于使用任何前面的语法的状态输入的损失,其中有一个状态参数和dLdSout对应于损耗对层态输出的导数。

  • [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)也返回导数dLdW关于可学习参数的损失,并返回导数dLdSin对于使用任何前面语法的层状态输入的损失,其中具有单个状态参数和单个可学习参数。

您可以调整具有多个输入、多个输出、多个可学习参数或多个状态参数的层的语法:

  • 对于有多个输入的层,替换X而且dLdXX1,…,XN而且dLdX1,…,dLdXN,分别为N是输入的数量。

  • 对于有多个输出的层,替换Z而且dLdZZ1,…,ZM评选而且dLdZ1,…,dLdZM,分别为是输出的数量。

  • 对于具有多个可学习参数的层,替换dLdWdLdW1,…,dLdWP,在那里P是可学习参数的个数。

  • 对于具有多个状态参数的层,替换dLdSin而且dLdSoutdLdSin1,…,dLdSinK而且dLdSout1,…,dLdSoutK,分别为K是状态参数的个数。

要通过防止在向前和向后传递之间保存未使用的变量来减少内存使用,请将相应的输入参数替换为

提示

若输入数为落后的可以变化,然后使用变长度输入宗量而不是后面的输入参数.在这种情况下,变长度输入宗量是单元格数组的输入,第一个在哪里N元素对应于N层输入,下一个元素对应于层输出,下一个元素对应于损失相对于层输出,下一个K元素对应于K对损失的导数K状态输出,最后一个元素对应于内存

如果输出的数量可以变化,那么使用varargout而不是输出参数。在这种情况下,varargout是单元格数组的输出,第一个在哪里N元素对应于N损失的导数N层输入,下一个P元素对应于损失相对于P可学习参数,以及下一个K元素对应于损失相对于K状态输入。

提示

如果层转发函数支持金宝appdlarray对象,然后软件自动确定反向函数,而不需要指定落后的函数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app

在图层中“向后”的输出参数数量不正确 可选选项的语法落后的函数输出的层数不一致。

对于具有多个输入或输出的层,必须设置层属性的值NumInputs(或者,InputNames),NumOutputs(或者,OutputNames)的层构造函数,分别。

多观察

checkLayer函数检查层函数对单个和多个观测值是否有效。要检查多个观测值,请使用ObservationDimension选择。如果指定了观测维度,则checkLayer函数使用大小为1和2的迷你批生成的数据检查层函数是否有效。如果未指定此名称-值对,则该函数将跳过检查层函数是否对多个观察值有效的测试。

测试诊断 描述 可能的解决方案
跳过多观察测试。要启用多个观测值的检查,请在checkLayer中指定'ObservationDimension'参数 如果没有指定“ObservationDimension”参数checkLayer,则该函数跳过使用多个观测值检查数据的测试。

使用命令checkLayer(层、validInputSize ObservationDimension,昏暗的),在那里是自定义层的实例,validInputSize是一个向量指定有效的输入大小的层,和昏暗的指定层输入中观测值的维度。

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

函数不会出错

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

中间层次。测试predictDoesNotErrorforwardDoesNotError,backwardDoesNotError检查层函数在传递有效大小的输入时不会出错。如果指定了观测维度,则该函数将检查该层的单个观测值和多个观测值。

测试诊断 描述 可能的解决方案
函数'predict'抛出一个错误: 预测传递大小的数据时,函数错误validInputSize

方法中描述的错误框架的诊断部分。

提示

如果层转发函数支持金宝appdlarray对象,然后软件自动确定反向函数,而不需要指定落后的函数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app

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

输出层。测试forwardLossDoesNotError而且backwardLossDoesNotError检查层函数在传递有效大小的输入时不会出错。如果指定了观测维度,则该函数将检查该层的单个观测值和多个观测值。

测试诊断 描述 可能的解决方案
函数'forwardLoss'抛出一个错误: forwardLoss传递大小的数据时,函数错误validInputSize

方法中描述的错误框架的诊断部分。

提示

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

函数'backwardLoss'抛出一个错误: 可选backwardLoss传递大小的数据时,函数错误validInputSize

输出大小一致

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

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

落后的函数语法取决于层的类型。

  • dLdX =向后(层,X,Z,dLdZ,内存)返回导数dLdX相对于层输入的损失,其中只有一个输入和一个输出。Z对应正向函数输出和dLdZ对应于损失对的导数Z.函数输入内存对应于正向函数的内存输出。

  • [dLdX,dLdW] = backward(层,X,Z,dLdZ,内存)也返回导数dLdW关于可学习参数的损失,其中只有一个可学习参数。

  • [dLdX,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)也返回导数dLdSin对于使用任何前面的语法的状态输入的损失,其中有一个状态参数和dLdSout对应于损耗对层态输出的导数。

  • [dLdX,dLdW,dLdSin] = backward(layer,X,Z,dLdZ,dLdSout,memory)也返回导数dLdW关于可学习参数的损失,并返回导数dLdSin对于使用任何前面语法的层状态输入的损失,其中具有单个状态参数和单个可学习参数。

您可以调整具有多个输入、多个输出、多个可学习参数或多个状态参数的层的语法:

  • 对于有多个输入的层,替换X而且dLdXX1,…,XN而且dLdX1,…,dLdXN,分别为N是输入的数量。

  • 对于有多个输出的层,替换Z而且dLdZZ1,…,ZM评选而且dLdZ1,…,dLdZM,分别为是输出的数量。

  • 对于具有多个可学习参数的层,替换dLdWdLdW1,…,dLdWP,在那里P是可学习参数的个数。

  • 对于具有多个状态参数的层,替换dLdSin而且dLdSoutdLdSin1,…,dLdSinK而且dLdSout1,…,dLdSoutK,分别为K是状态参数的个数。

要通过防止在向前和向后传递之间保存未使用的变量来减少内存使用,请将相应的输入参数替换为

提示

若输入数为落后的可以变化,然后使用变长度输入宗量而不是后面的输入参数.在这种情况下,变长度输入宗量是单元格数组的输入,第一个在哪里N元素对应于N层输入,下一个元素对应于层输出,下一个元素对应于损失相对于层输出,下一个K元素对应于K对损失的导数K状态输出,最后一个元素对应于内存

如果输出的数量可以变化,那么使用varargout而不是输出参数。在这种情况下,varargout是单元格数组的输出,第一个在哪里N元素对应于N损失的导数N层输入,下一个P元素对应于损失相对于P可学习参数,以及下一个K元素对应于损失相对于K状态输入。

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

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

返回导数dLdX1,…,dLdXn与相应图层输入的大小相同X1,…,Xn

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

返回输出Z1,…,Zm评选预测与相应输出的大小相同Z1,…,Zm评选向前

对于“向后”,损失对“W”的导数大小不正确 损失对可学习参数的导数必须与相应的可学习参数相同。

返回导数dLdW1,…,dLdWk与相应的可学习参数大小相同W1,…,工作

提示

如果层转发函数支持金宝appdlarray对象,然后软件自动确定反向函数,而不需要指定落后的函数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app

输出层。测试forwardLossIsScalar类的输出forwardLoss函数是标量。当backwardLoss函数指定后,进行测试backwardLossIsConsistentInSize的输出forwardLoss而且backwardLoss尺寸是正确的。

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

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

的语法backwardLossdLdY = backwardLoss(layer,Y,T).输入Y包含由网络和做出的预测T包含培训目标。输出dLdY是损失对预测的导数吗Y.输出dLdY必须与层输入相同的大小Y

测试诊断 描述 可能的解决方案
“forwardLoss”的“loss”大小不正确 输出损失forwardLoss必须是标量。

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

'backwardLoss'损失'dLdY'的导数大小不正确 backwardLoss时,损失相对于层输入的导数必须与层输入的大小相同。

返回导数dLdY与图层输入相同的大小Y

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

数据类型一致性和GPU兼容性

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

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

许多MATLAB®内置功能支持金宝appgpuArray(并行计算工具箱)而且dlarray输入参数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app.有关在GPU上执行的函数的列表,请参见在图形处理器上运行MATLAB函数(并行计算工具箱)要使用GPU进行深度学习,还必须有支持GPU的设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)有关在MATLAB中使用gpu的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱)

中间层次。测试predictIsConsistentInTypeforwardIsConsistentInType,backwardIsConsistentInType检查该层函数的输出变量的数据类型是否正确。测试检查在给定数据类型输入时,层函数是否返回一致的数据类型,gpuArray使用底层类型

提示

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

测试诊断 描述 可能的解决方案
predict的Z类型不正确 输出的类型Z1,…,Zm评选预测函数必须与输入一致X1,…,Xn

返回输出Z1,…,Zm评选使用与输入相同的类型X1,…,Xn

“predict”的输出类型“out1”不正确
forward的Z类型不正确 输出的类型Z1,…,Zm评选可选的向前函数必须与输入一致X1,…,Xn
“forward”的输出类型“out1”不正确
“向后”的“dLdX”类型不正确 导数的类型dLdX1,…,dLdXn可选的落后的函数必须与输入一致X1,…,Xn

返回导数dLdX1,…,dLdXn使用与输入相同的类型X1,…,Xn

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

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

提示

如果层转发函数支持金宝appdlarray对象,然后软件自动确定反向函数,而不需要指定落后的函数。获取支持的函数列表金宝appdlarray对象,看到支持dlarray的函数列表金宝app

输出层。测试forwardLossIsConsistentInType而且backwardLossIsConsistentInType检查该层函数的输出变量的数据类型是否正确。测试检查在给定数据类型输入时,各层是否返回一致的数据类型,gpuArray使用底层类型

测试诊断 描述 可能的解决方案
'forwardLoss'的'loss'类型不正确 输出的类型损失forwardLoss函数必须与输入一致Y

返回损失使用与输入相同的类型Y

'backwardLoss'的'dLdY'的导数类型不正确 输出的类型dLdY可选的backwardLoss函数必须与输入一致Y

返回dLdY使用与输入相同的类型Y

提示

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

正确的梯度

测试gradientsAreNumericallyCorrect检查由层函数计算的梯度数值是否正确。测试backwardPropagationDoesNotError检查导数是否可以使用自动微分计算。

中间层次。当可选的落后的函数未指定,该测试backwardPropagationDoesNotError检查导数是否可以使用自动微分计算。当可选的落后的函数指定后,进行测试gradientsAreNumericallyCorrect在其中计算梯度的测试落后的都是正确的。

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

下列一项或多项:

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

  • 当可选的落后的函数未指定时,跟踪输入dlarrayforward函数中的对象已被破坏。例如,通过使用extractdata函数。

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

检查输入的导数dlarray对象可以被跟踪。来学习更多的导数轨迹dlarray对象,看到导数的跟踪

或者,通过创建命名为落后的.要了解更多信息,请参见

无法在层中反向传播。检查'predict'函数是否完全支持自动区分。金宝app或者,手动实现'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函数被破坏了。例如,通过使用extractdata函数。

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

检查输入的导数dlarray对象可以被跟踪。来学习更多的导数轨迹dlarray对象,看到导数的跟踪

或者,通过创建一个名为backwardLoss.要了解更多信息,请参见

'backwardLoss'的导数'dLdY'与数值梯度不一致

下列一项或多项:

  • 关于预测的导数Y计算错误

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

  • 容错能力太小

代入导数backwardLoss都是正确计算的。

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

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

提示

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

有效状态

对于具有状态属性的层,测试predictReturnsValidStates检查predict函数是否返回有效状态。当向前指定时,测试forwardReturnsValidStates检查forward函数是否返回有效状态。测试resetStateDoesNotError检查resetState函数返回具有有效状态属性的层。

测试诊断 描述 可能的解决方案
在图层中使用“预测”错误。'State'必须为实数数值数组或未格式化的数组对象 状态输出必须是实值数字数组或未格式化的dlarray对象。 中确定的状态框架的诊断是实值数字数组还是未格式化的dlarray对象。
在图层中使用“resetState”错误。'State'必须为实数数值数组或未格式化的数组对象 返回层的状态属性必须是实值数值数组或未格式化dlarray对象。

代码生成兼容性

如果你设置CheckCodegenCompatibility选项1(正确),然后checkLayer函数检查该层的代码生成兼容性。

测试codegenPragmaDefinedInClassDef检查层定义是否包含代码生成pragma% # codegen.测试checkFor金宝appSupportedLayerPropertiesForCodegen检查图层属性是否支持代码生成。金宝app测试predictIsValidForCodegeneration的输出预测尺寸和批次大小一致。

代码生成只支持带有二维图像或特征金宝app输入的中间层。代码生成不支持带有状态属性的层(带有attribu金宝appte的属性)状态).

checkLayer函数不检查层使用的函数是否与代码生成兼容。要检查自定义层使用的函数是否也支持代码生成,请首先使用金宝app代码生成准备有关更多信息,请参见使用代码生成准备工具检查代码(MATLAB编码器)

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

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

对于自定义层,非标量层属性必须为单类型或双类型或字符数组 该层包含除单个、双精度或字符数组以外的类型的非标量属性。

将非标量属性转换为使用类型为单、双或字符数组的表示形式。

例如,将分类数组转换为类型为整数的数组表示类别。

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

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

例如,将类别标量转换为类型的整数表示类别。

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

输出的维数Z预测与层输入的维数不匹配。

预测函数,返回与层输入具有相同维数的输出。

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

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

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

另请参阅

|

相关的话题