主要内容

checkLayer

检查自定义层或功能层的有效性

描述

例子

checkLayer (validInputSize中大小的生成数据检查自定义层或函数层的有效性validInputSize.对于具有单一输入的层,设置validInputSize到该层的典型输入数据大小。对于有多个输入的层,设置validInputSize到具有典型大小的单元格数组,其中每个元素对应于一个层输入。

例子

checkLayer (validInputSize名称=值使用一个或多个名称-值参数指定其他选项。

例子

全部折叠

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

自定义图层preluLayer,作为支持文件附加到这个示例中,它将PReLU操作应用于输入数据。要访问此层,请将此示例作为实时脚本打开。

创建一个层的实例。

层= preluLayer;

因为该层有一个自定义的初始化函数,所以使用networkDataFormat对象,该对象指定对层的典型输入的单个观察的预期输入大小和格式。

指定有效的输入大小(24日24日20),其中维数对应上一层输出的高度、宽度和通道数。

validInputSize = [24 24 20];布局= networkDataLayout (validInputSize,“SSC”);层=初始化(层、布局);

检查层有效性使用checkLayer.指定有效的输入大小为初始化层时使用的大小。当您通过网络传递数据时,该层期望4-D数组输入,其中前三个维度对应于前一层输出的高度、宽度和通道数量,而第四个维度对应于观察结果。

validInputSize checkLayer(层)
跳过multi-observation测试。要启用具有多个观察值的测试,请指定“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.054851 seconds.

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

检查多个观测

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

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

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

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

创建一个函数层对象,将软符号操作应用于输入。软符号运算由函数给出 f x x 1 + | x |

(@(X) X./(1 + abs(X))))
Name: " PredictFcn: @(X)X./(1+abs(X))可格式化:0可加速:0可学习参数没有属性。State Parameters无属性。显示所有属性

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

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

validInputSize = [5 5 20];validInputSize checkLayer(层)
跳过multi-observation测试。要启用具有多个观察值的测试,请指定“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.28075 seconds.

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

检查多个观测

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

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

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

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

检查自定义层的代码生成兼容性codegenPreluLayer

自定义图层codegenPreluLayer,作为支持文件附加到这个示例中,它将PReLU操作应用于输入数据。要访问此层,请将此示例作为实时脚本打开。

创建该层的实例并使用checkLayer.指定有效的输入大小为对层的典型输入的单个观察的大小。该层期望4-D数组输入,其中前三个维度对应于前一层输出的高度、宽度和通道数量,第四个维度对应于观测结果。

指定观测值输入的典型大小并设置“ObservationDimension”选项4。要检查代码生成兼容性,请设置CheckCodegenCompatibility选项真正的.的checkLayer函数不会检查与代码生成不兼容的函数。要检查代码生成是否支持自定义层定义,首先使用代码生成准备更多信息,请参见使用代码生成准备工具检查代码(MATLAB编码器)

层= codegenPreluLayer (20,“prelu”);validInputSize = [24 24 20];checkLayer(层、validInputSize ObservationDimension = 4, CheckCodegenCompatibility = true)
跳过GPU测试。没有找到兼容的GPU设备。运行nnet.checklayer.TestLayerWithoutBackward  .......... .......... ...完成nnet.checklayer.TestLayerWithoutBackward __________测试总结:23通过,0失败,0不完整,5跳过。时间:0.83484秒。

该函数不会检测到该层的任何问题。

输入参数

全部折叠

层要检查,指定为nnet.layer.Layernnet.layer.ClassificationLayernnet.layer.RegressionLayer,或FunctionLayer对象。

如果有可学习或状态参数,则层必须初始化。如果该层有自定义初始化函数,然后首先使用initialize函数using初始化该层networkDataLayout对象。

checkLayer函数不支持继承的层nnet.layer.Formattable

有关演示如何定义自己的自定义层的示例,请参见定义具有可学习参数的自定义深度学习层.要创建应用指定功能的层,请使用functionLayer

层的有效输入大小,指定为正整数的向量或正整数向量的单元格数组。

  • 对于具有单一输入的层,指定validInputSize作为一个整数向量,对应于输入数据的维数。例如,(5 5 10)对应于大小为5 × 5 × 10的有效输入数据。

  • 对于有多个输入的层,指定validInputSize作为向量的单元格数组,其中每个向量对应于一个层输入,而向量的元素对应于相应输入数据的维度。例如,{[24 24 20],[24 24 10]}对应于两个输入的有效输入大小,其中24 × 24 × 20是第一个输入的有效输入大小,24 × 24 × 10是第二个输入的有效输入大小。

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

对于较大的输入尺寸,梯度检查的运行时间更长。要加快检查速度,请指定更小的有效输入大小。

例子:(5 5 10)

例子:{[24 24 20],[24 24 10]}

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|细胞

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

例子:ObservationDimension = 4将观察尺寸设置为4

观察尺寸,指定为正整数。

观察维度指定层输入数据的哪个维度对应观察结果。例如,如果该层期望输入数据的大小h——- - - - - -w——- - - - - -c——- - - - - -N,在那里hw,c分别对应输入数据的高度、宽度和通道数N对应于观测次数,则观测维数为4。有关更多信息,请参见层输入大小

如果指定了观察维度,则checkLayerFunction使用大小为1和2的小批量生成的数据检查层函数是否有效。如果不指定观察维度,则该函数将跳过相应的测试。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

标志以启用代码生成测试,指定为0(虚假的)或1(真正的)。

如果CheckCodegenCompatibility1(true),则必须指定ObservationDimension选择。

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

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

有关显示如何定义支持代码生成的自定义层的示例,请参见为代码生成定义自定义深度学习层

数据类型:逻辑

更多关于

全部折叠

层输入大小

对于每一层,有效的输入尺寸和观测尺寸取决于前一层的输出。

中间的层

对于中间层(类型的层)nnet.layer.Layer),有效输入尺寸和观测尺寸取决于输入到该层的数据类型。

  • 对于具有单一输入的层,指定validInputSize作为一个整数向量,对应于输入数据的维数。

  • 对于有多个输入的层,指定validInputSize作为向量的单元格数组,其中每个向量对应于一个层输入,而向量的元素对应于相应输入数据的维度。

对于较大的输入尺寸,梯度检查的运行时间更长。要加快检查速度,请指定更小的有效输入大小。

层的输入 输入的大小 观察维度
特征向量 c——- - - - - -N,在那里c对应于通道和的数量N观察的次数是多少 2
二维图像 h——- - - - - -w——- - - - - -c——- - - - - -N,在那里hw,c分别对应于图像的高度、宽度和通道数,和N观察的次数是多少 4
三维图像 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N,在那里hwd,c分别为三维图像的高度、宽度、深度和通道数,和N观察的次数是多少 5
向量序列 c——- - - - - -N——- - - - - -年代,在那里c是序列特征的数量,N是观察的次数,和年代是序列长度 2
二维图像序列 h——- - - - - -w——- - - - - -c——- - - - - -N——- - - - - -年代,在那里hw,c分别对应于图像的高度、宽度和通道数,N是观察的次数,和年代是序列长度 4
三维图像序列 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N——- - - - - -年代,在那里hwd,c分别对应三维图像的高度、宽度、深度和通道数,N是观察的次数,和年代是序列长度 5

例如,对于二维图像分类问题,设置validInputSize[w c h],在那里hw,c分别对应于图像的高度、宽度和通道数,和ObservationDimension4

代码生成支持仅使用二维图像输入的中间层。

输出层

对于输出层(类型层nnet.layer.ClassificationLayernnet.layer.RegressionLayer),设置validInputSize到单个输入观测的典型尺寸Y层。

的有效输入尺寸和观测维数Y取决于问题的类型:

分类任务 输入的大小 观察维度
二维图像分类 1-by-1-by -K——- - - - - -N,在那里K是多少班和N观察的次数是多少 4
三维图像分类 1-by-1-by-1-by -K——- - - - - -N,在那里K是多少班和N观察的次数是多少 5
Sequence-to-label分类 K——- - - - - -N,在那里K是多少班和N观察的次数是多少 2
Sequence-to-sequence分类 K——- - - - - -N——- - - - - -年代,在那里K是类的数量,N是观察的次数,和年代是序列长度 2

例如,对于二维图像分类问题,设置validInputSize(1 1 K),在那里K是多少班,和ObservationDimension4

对于回归问题,维数Y也取决于问题的类型。尺寸说明如下表所示Y

回归的任务 输入的大小 观察维度
二维图像回归 1-by-1-by -R——- - - - - -N,在那里R回复的数量和N观察的次数是多少 4
二维Image-to-image回归 h——- - - - - -w——- - - - - -c——- - - - - -N,在那里hw,c输出的高度、宽度和通道数是否分别为N观察的次数是多少 4
三维图像回归 1-by-1-by-1-by -R——- - - - - -N,在那里R回复的数量和N观察的次数是多少 5
3 d Image-to-image回归 h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N,在那里hwd,c输出的高度、宽度、深度和通道数是否分别为N观察的次数是多少 5
Sequence-to-one回归 R——- - - - - -N,在那里R回复的数量和N观察的次数是多少 2
Sequence-to-sequence回归 R——- - - - - -N——- - - - - -年代,在那里R是回应的数量,N是观察的次数,和年代是序列长度 2

例如,对于二维图像回归问题,设置validInputSize(1 1 R),在那里R是回复的数量,和ObservationDimension4

算法

全部折叠

测试列表

checkLayer函数通过执行一系列测试来检查自定义层的有效性,这些测试在这些表中进行了描述。有关使用的测试的详细信息checkLayer,请参阅检查自定义层有效性

中间的层

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

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

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

forwardPredictAreConsistentInSize

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

backwardDoesNotError 当指定时,落后的没有错误。
backwardIsConsistentInSize

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

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

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

predictIsConsistentInType

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

forwardIsConsistentInType

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

backwardIsConsistentInType

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

gradientsAreNumericallyCorrect 落后的,在?中计算的梯度落后的与数值梯度一致。
backwardPropagationDoesNotError 落后的未指定时,可使用自动微分计算导数。
predictReturnsValidStates 对于具有状态属性的层,预测函数返回有效状态。
forwardReturnsValidStates 对于具有状态属性的层,向前函数,如果指定,则返回有效状态。
resetStateDoesNotError 对于具有状态属性的层,resetState函数,如果指定,则不会出错并将状态重置为有效状态。
codegenPragmaDefinedInClassDef 的编译指示“% # codegen”对于代码生成,在类文件中指定。
layerPropertiesSupportCodegen 层属性支持代码生成。
predictSupportsCodegen 预测对于代码生成有效。
doesNotHaveStateProperties 对于代码生成,该层没有状态属性。
functionLayerSupportsCodegen 对于代码生成,层函数必须是路径上的命名函数Formattable属性必须0(假)。

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

  • predictIsConsistentInType

  • forwardIsConsistentInType

  • backwardIsConsistentInType

要在GPU上执行层函数,函数必须支持类型的输入和输出gpuArray使用基础数据类型

输出层

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上执行层函数,函数必须支持类型的输入和输出gpuArray使用基础数据类型

版本历史

介绍了R2018a

Baidu
map