主要内容

检查自定义层有效性

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

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

检查自定义层有效性

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

自定义图层preluLayer附加到这是作为支持文件的示例,将PRELU操作应用于输入数据。万博1manbetx要访问此图层,请将此示例打开为实时脚本。

创建一个层的实例,并检查它是否有效使用checkLayer.将有效的输入大小设置为层中单个观测输入的典型大小。对于单个输入,层期望观察大小H——- - - - - -W.——- - - - - -C,在那里HW.,C分别为上一层输出的高度、宽度和通道数。

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

层=预铺层(20);validInputSize=[5 20];checkLayer(层,validInputSize)
跳过多观察测试。要启用具有多个观察值的测试,请指定“ObservationDimension”选项。对于二维图像数据,将“ObservationDimension”设置为4。对于三维图像数据,将“ObservationDimension”设置为5。对于序列数据,将“ObservationDimension”设置为2。跳过GPU测试。找不到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。正在运行nnet.checklayer.TestLayerWithoutBackward。。完成nnet.checklayer.TestLayerWithoutBackward测试摘要:12通过,0失败,0不完整,16跳过。所用时间:0.18741秒。

结果显示通过、失败和跳过测试的数量。如果不指定ObservationsDimension选项,或者没有GPU,然后函数跳过相应的测试。

检查多个观测

对于多观测输入,该层期望一个大小的观测数组H——- - - - - -W.——- - - - - -C——- - - - - -N,在那里HW.,C通道的高度、宽度和数量分别是和吗N为观察次数。

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

层=预铺层(20);validInputSize=[5 20];检查层(层,有效输入大小,观测维度=4)
跳过GPU测试。找不到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成图层的有效性,请指定“CheckCodeGencompatibility”和“观察Dimension”选项。运行nnet.Checklayer.TestLayerWithoutBound .......... Done Nnet.Checklayer.TestLayerWithoutBackward __________测试摘要:18通过,0失败,0不完整,10跳。经过时间:0.19972秒。

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

测试清单

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

中间的层

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

测试 描述
functionSyntaxesAreCorrect 层函数的语法定义正确。
predictDoesNotError 预测函数没有错误。
forwardDoesNotError

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

forwardPredictAreConsistentInSize

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

落后并不可怕 指定时,落后的没有错误。
backwardIsConsistentInSize

落后的时,落后的大小一致:

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

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

PredictisConsistentType

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

forwardIsConsistentInType

向前时,向前与输入的类型一致。

反向索考虑因素intype.

落后的时,落后的与输入的类型一致。

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

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

  • PredictisConsistentType

  • forwardIsConsistentInType

  • 反向索考虑因素intype.

要在GPU上执行层函数,函数必须支持类型为的输入和输出万博1manbetxgpuArray使用底层数据类型仅有一个的

输出层

checkLayer函数使用这些测试检查自定义输出层(类型为nnet.layer.ClassificationLayernnet.layer.regressionLayer.regressionLayer.).

测试 描述
forwardlossdoesnoterror. forwardLoss没有错误。
backwardLossDoesNotError backwardLoss没有错误。
forwardlossiscalar. 输出forwardLoss是标量。
backwardLossIsConsistentInSize backwardLoss时,输出backwardLoss尺寸一致:dLdY和预测的大小一样吗y
正向损失一致性类型

输出forwardLoss类型一致:损失和预测的类型一样吗y

Backwardlossisconsistentintype.

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

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

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

生成的数据

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

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

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

如果指定ObservationDimension选项,然后目标是一个热编码的向量(包含单个1的向量,以及其他地方的6个)。

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

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

诊断学

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

功能语法

考试functionSyntaxesAreCorrect检查层函数是否有正确定义的语法。

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

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

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

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

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

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

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

  • 对于具有多个输出的图层,请替换Z.Z1,…,ZM评选,在那里m为输出数。这NumOutputs属性必须匹配m

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

提示

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

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

提示

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

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

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

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

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

  • [Z,状态]=前进(层,X)也输出更新的状态参数状态,在那里有一个状态参数。

  • [\uuuu,内存]=转发(层,X)也返回自定义的内存值落后的函数使用任何前面的语法。如果层都有自定义向前函数和自定义落后的函数,则forward函数必须返回一个内存值。

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

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

  • 对于具有多个输出的图层,请替换Z.Z1,…,ZM评选,在那里m为输出数。这NumOutputs属性必须匹配m

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

提示

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

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

提示

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

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

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

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

  • dLdX =向后(层,X, Z, dLdZ,内存)返回衍生品dLdX相对于层输入的损耗,其中只有一个输入和一个输出。Z.对应于正向功能输出和dLdZ对应于损失对的导数Z..函数的输入记忆力对应于前进功能的存储器输出。

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

  • [dLdX, dLdSin] =向后(层,X, Z, dLdZ dLdSout,内存)也返回导数dLdSin与使用任何前面语法的状态输入相关的损失有一个状态参数和DLDSout.对应于损耗相对于层状态输出的导数。

  • [DLDX,DLDW,DLDSIN] =向后(图层,x,z,dldz,dldsout,内存)也返回导数dLdW对可学习参数的损失,并返回导数dLdSin使用以前的任何语法,在哪里相对于图层状态输入的损失具有单个状态参数和单个可学习参数。

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

  • 对于有多个输入的层,替换XdLdXX1,…,XNdLdX1,…,dLdXN分别在哪里N是输入的数量。

  • 对于具有多个输出的图层,请替换Z.dLdZZ1,…,ZM评选dLdZ1,…,dLdZM分别在哪里m为输出数。

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

  • 对于具有多个状态参数的层,替换dLdSinDLDSout.dldsin1,...,dldsinkdLdSout1,…,dLdSoutK分别在哪里K.是状态参数的数量。

为了防止在前向传递和后向传递之间保存未使用的变量,从而减少内存使用,可以将相应的输入参数替换为

提示

如果输入的数量落后的可以变化,然后使用瓦拉金而不是后面的输入参数.在这种情况下,瓦拉金一个单元格数组的输入,第一个在哪里N元素对应于N层输入,下一个m元素对应于m图层输出,下一个m元素对应于相对于损失的衍生物m图层输出,下一个K.元素对应于K.损失对的导数K.状态输出,最后一个元素对应于记忆力

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

提示

如果层转发功能支持万博1manbetxdlarray对象,则软件会自动确定向后函数,而无需指定落后的函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

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

多重观察

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

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

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

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

函数不会出错

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

中间层次。测试predictDoesNotErrorforwardDoesNotError,落后并不可怕检查层函数在传递有效大小的输入时不会出错。如果您指定了一个观察维度,那么该函数将同时检查该层的单个观察和多个观察。

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

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

提示

如果层转发功能支持万博1manbetxdlarray对象,则软件会自动确定向后函数,而无需指定落后的函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

输出图层。测试forwardlossdoesnoterror.backwardLossDoesNotError检查层函数在传递有效大小的输入时不会出错。如果您指定了一个观察维度,那么该函数将同时检查该层的单个观察和多个观察。

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

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

提示

如果forwardLoss功能支持万博1manbetxdlarray对象,然后软件自动确定向后损耗功能,您无需指定backwardLoss函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

输出大小一致

这些测试检查图层功能输出的大小是否一致。

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

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

  • dLdX =向后(层,X, Z, dLdZ,内存)返回衍生品dLdX相对于层输入的损耗,其中只有一个输入和一个输出。Z.对应于正向功能输出和dLdZ对应于损失对的导数Z..函数的输入记忆力对应于前进功能的存储器输出。

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

  • [dLdX, dLdSin] =向后(层,X, Z, dLdZ dLdSout,内存)也返回导数dLdSin与使用任何前面语法的状态输入相关的损失有一个状态参数和DLDSout.对应于损耗相对于层状态输出的导数。

  • [DLDX,DLDW,DLDSIN] =向后(图层,x,z,dldz,dldsout,内存)也返回导数dLdW对可学习参数的损失,并返回导数dLdSin使用以前的任何语法,在哪里相对于图层状态输入的损失具有单个状态参数和单个可学习参数。

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

  • 对于有多个输入的层,替换XdLdXX1,…,XNdLdX1,…,dLdXN分别在哪里N是输入的数量。

  • 对于具有多个输出的图层,请替换Z.dLdZZ1,…,ZM评选dLdZ1,…,dLdZM分别在哪里m为输出数。

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

  • 对于具有多个状态参数的层,替换dLdSinDLDSout.dldsin1,...,dldsinkdLdSout1,…,dLdSoutK分别在哪里K.是状态参数的数量。

为了防止在前向传递和后向传递之间保存未使用的变量,从而减少内存使用,可以将相应的输入参数替换为

提示

如果输入的数量落后的可以变化,然后使用瓦拉金而不是后面的输入参数.在这种情况下,瓦拉金一个单元格数组的输入,第一个在哪里N元素对应于N层输入,下一个m元素对应于m图层输出,下一个m元素对应于相对于损失的衍生物m图层输出,下一个K.元素对应于K.损失对的导数K.状态输出,最后一个元素对应于记忆力

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

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

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

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

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

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

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

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

提示

如果层转发功能支持万博1manbetxdlarray对象,则软件会自动确定向后函数,而无需指定落后的函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

输出图层。考试forwardlossiscalar.检查forwardLoss函数是标量。当backwardLoss函数指定时,测试backwardLossIsConsistentInSize检查的输出forwardLossbackwardLoss尺寸正确。

的语法forwardLoss损失= forwardLoss(层,Y, T). 输入y与电视台的预测相符。这些预测是前一层的输出。输入T.对应于培训目标。输出损失是两者之间的损失yT.根据指定的损耗函数。输出损失必须是标量。

如果forwardLoss功能支持万博1manbetxdlarray对象,然后软件自动确定向后损耗功能,您无需指定backwardLoss函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

的语法backwardLossDLDY = Backwardloss(图层,y,t). 输入y包含了电视台和T.包含培训目标。输出dLdY损失相对于预测的导数是多少y.输出dLdY必须与图层输入相同y

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

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

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

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

如果forwardLoss功能支持万博1manbetxdlarray对象,然后软件自动确定向后损耗功能,您无需指定backwardLoss函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

这些测试检查图层函数输出是否在类型中是一致的,并且该图层函数是GPU兼容的。

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

许多MATLAB®内置功能支持万博1manbetxgpuArray(并行计算工具箱)dlarray输入参数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx.有关在GPU上执行的函数列表,请参见在GPU上运行MATLAB函数(并行计算工具箱)要使用GPU进行深度学习,您还必须具有支持的GPU设备。万博1manbetx有关支持设备的信息,请参阅万博1manbetxGPU支万博1manbetx持情况(并行计算工具箱)有关在MATLAB中使用gpu的更多信息,请参见MATLAB中的GPU计算(并行计算工具箱)

中间层次。测试PredictisConsistentTypeforwardIsConsistentInType,反向索考虑因素intype.检查该层函数输出的数据类型是否正确。测试检查给定数据类型输入时,层函数是否返回一致的数据类型仅有一个的,gpuArray使用底层类型仅有一个的

提示

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

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

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

'predict'的输出'out1'类型不正确
'Z'类型不正确 输出的类型Z1,…,Zm评选任择议定书向前函数必须与输入保持一致X1,…,Xn
'forward'输出'out1'类型错误
'dLdX'的错误类型为'backward' 导数的类型dLdX1,…,dLdXn任择议定书落后的函数必须与输入保持一致X1,…,Xn

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

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

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

提示

如果层转发功能支持万博1manbetxdlarray对象,则软件会自动确定向后函数,而无需指定落后的函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

测试诊断 描述 可能的解决方案
'forwardloss'的“丢失”类型不正确 输出的类型损失forwardLoss功能必须与输入一致y

返回损失与输入的类型相同y

损失“dLdY”的衍生工具类型不正确,用于“反向损失” 输出的类型dLdY任择议定书backwardLoss功能必须与输入一致y

返回dLdY与输入的类型相同y

提示

如果forwardLoss功能支持万博1manbetxdlarray对象,然后软件自动确定向后损耗功能,您无需指定backwardLoss函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

校正梯度

考试gradientsAreNumericallyCorrect检查由图层函数计算的渐变是否正确正确。考试backwardPropagationDoesNotError检查衍生品是否可以使用自动微分来计算。

中间层次。当可选落后的函数未指定,则测试backwardPropagationDoesNotError检查衍生品是否可以使用自动微分来计算。当可选落后的函数指定时,测试gradientsAreNumericallyCorrect测试所计算梯度的测试落后的数字是正确的。

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

以下一项或多项:

  • 当可选落后的未指定函数,层转发函数不支持万博1manbetxdlarray对象。

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

检查前进功能是否支持万博1manbetxdlarray对象。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

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

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

以下一项或多项:

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

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

  • 误差容忍度太小

如果层转发功能支持万博1manbetxdlarray对象,然后软件自动确定向后函数,您可以省略向后函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

检查一下导数落后的正确计算。

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

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

对于“向后”,损失相对于输入“in1”的导数与数值梯度不一致
“向后”的损失对“W”的导数与数值梯度不一致

提示

如果层转发功能支持万博1manbetxdlarray对象,则软件会自动确定向后函数,而无需指定落后的函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

输出图层。当可选backwardLoss函数未指定,则测试backwardPropagationDoesNotError检查衍生品是否可以使用自动微分来计算。当可选backwardLoss函数指定时,测试gradientsAreNumericallyCorrect测试所计算梯度的测试backwardLoss数字是正确的。

测试诊断 描述 可能的解决方案
期望一个没有尺寸标签的dlarray,但却发现了标签 当可选backwardLoss函数未指定,则forwardLoss函数必须输出dlarray没有尺寸标签的对象。 确保任何方法dlarray中创建的forwardLoss函数不包含维度标签。
无法通过图层反向传播。检查'ForwardLoss'功能是否完全支持自动差异化。万博1manbetx或者,手动实现“反向索数”函数

以下一项或多项:

  • 当可选backwardLoss函数未指定,图层forwardLoss功能不支持万博1manbetxdlarray对象。

  • 当可选backwardLoss未指定函数,则跟踪输入dlarray中的对象forwardLoss功能已经损坏。例如,通过使用extractdata函数。

检查这一点forwardLoss功能支持万博1manbetxdlarray对象。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

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

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

“向后损失”的导数“dLdY”与数值梯度不一致

以下一项或多项:

  • 对预测的导数y不正确计算

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

  • 误差容忍度太小

检查一下导数backwardLoss正确计算。

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

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

提示

如果forwardLoss功能支持万博1manbetxdlarray对象,然后软件自动确定向后损耗功能,您无需指定backwardLoss函数。获取支持的函数列表万博1manbetxdlarray对象,看到支持dlarray的函数列表万博1manbetx

有效状态

对于具有状态属性的层,测试predictReturnsValidStates检查predict函数是否返回有效状态。什么时候向前被指定,测试forwardReturnsValidStates检查forward函数是否返回有效状态。测试resetStateDoesNotError检查这一点resetState函数返回具有有效状态属性的图层。

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

代码生成的兼容性

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

考试代码genpragmadefinedinclassdef检查层定义是否包含代码生成提示%#编码基因.考试checkFor万博1manbetxSupportedLayerPropertiesForCodegen检查层属性是否支持代码生成。万博1manbetx考试predictIsValidForCodegeneration检查的输出预测尺寸和批尺寸一致。

代码生成只支持带有二维图像或特征万博1manbetx输入的中间层。代码生成不支持带有状态属性的层(属性带属性)万博1manbetx状态).

checkLayer功能不会检查图层使用的函数是否与代码生成兼容。要检查自定义层使用的函数还支持代码生成,首先使用万博1manbetx代码生成准备要了解更多信息,请参见使用代码生成准备工具检查代码(MATLAB编码器)

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

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

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

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

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

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

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

例如,将分类标量转换为类型为的整数代表了一类。

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

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

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

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

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

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

另请参阅

|

相关的话题