checkLayer
检查自定义层或功能层的有效性
描述
checkLayer (
中大小的生成数据检查自定义层或功能层的有效性层
,validInputSize
)validInputSize
.对于具有单个输入的层,设置validInputSize
到层的输入数据的典型大小。对于具有多个输入的层,设置validInputSize
到典型大小的单元数组,其中每个元素对应一个层输入。
checkLayer (
使用一个或多个名称-值参数指定其他选项。层
,validInputSize
,名称=值
)
例子
检查自定义图层的有效性
检查示例自定义层的有效性preluLayer
.
自定义图层preluLayer
作为支持文件附在本示例中,它将PReLU操作应用于输入数据。金宝app要访问这个层,打开这个示例作为一个活动脚本。
创建该图层的实例。
layer = preluLayer;
因为层有一个自定义的初始化函数,所以使用networkDataFormat
对象,该对象指定层的典型输入的单个观察值的预期输入大小和格式。
指定有效的输入大小[24 24 20]
,其中维度对应于前一层输出的高度、宽度和通道数。
validInputSize = [24 24 20];layout = networkDataLayout(validInputSize,“SSC”);Layer = initialize(Layer,layout);
检查层的有效性使用checkLayer
.将有效的输入大小指定为初始化层时使用的大小。当您通过网络传递数据时,该层期望4-D阵列输入,其中前三个维度对应于前一层输出的高度、宽度和通道数,第四个维度对应于观测值。
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.054851 seconds.
结果显示通过、失败和跳过测试的数量。如果没有指定ObservationsDimension
选项,或者没有GPU,则该函数跳过相应的测试。
检查多个观测值
对于多观测图像输入,该层期望一个大小相同的观测数组h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c通道的高度、宽度和数量分别是和N是观测值的个数。
如果要检查多个观测值的层有效性,可以指定一个观测值的典型大小,并设置ObservationDimension
选项4。
checkLayer(层、validInputSize ObservationDimension = 4)
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。运行nnet.checklayer.TestLayerWithoutBackward .......... ........完成nnet.checklayer.TestLayerWithoutBackward __________测试总结:18通过,0失败,0不完整,10跳过。运行时间:0.030498秒。
在这种情况下,该函数不会检测到层的任何问题。
检查功能层有效性
创建一个将软签名操作应用于输入的功能层对象。软签名操作由函数给出 .
layer = functionLayer(@(X) X /(1 + abs(X)))
layer = FunctionLayer with properties: Name: " PredictFcn: @(X)X./(1+abs(X)) formatable: 0 Acceleratable: 0 Learnable Parameters无属性。状态参数无属性。显示所有属性
检查层它是有效的使用checkLayer
函数。将有效的输入大小设置为单个观测输入到层的典型大小。例如,对于单个输入,层期望观察值的大小h——- - - - - -w——- - - - - -c,在那里h,w,c分别为前一层输出的高度、宽度和通道数。
指定validInputSize
作为输入数组的典型大小。
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.29567 seconds.
结果显示通过、失败和跳过测试的数量。如果没有指定ObservationsDimension
选项,或者没有GPU,则该函数跳过相应的测试。
检查多个观测值
对于多观测图像输入,该层期望一个大小相同的观测数组h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c通道的高度、宽度和数量分别是和N是观测值的个数。
如果要检查多个观测值的层有效性,可以指定一个观测值的典型大小,并设置ObservationDimension
选项4。
layer = functionLayer(@(X) X /(1 + abs(X)));validInputSize = [5 5 20];checkLayer(层、validInputSize ObservationDimension = 4)
跳过GPU测试。没有找到兼容的GPU设备。跳过代码生成兼容性测试。要检查代码生成层的有效性,请指定“CheckCodegenCompatibility”和“ObservationDimension”选项。运行nnet.checklayer.TestLayerWithoutBackward .......... ........完成nnet.checklayer.TestLayerWithoutBackward __________测试总结:18通过,0失败,0不完整,10跳过。运行时间:0.14659秒。
在这种情况下,该函数不会检测到层的任何问题。
检查自定义层的代码生成兼容性
检查自定义层的代码生成兼容性codegenPreluLayer
.
自定义图层codegenPreluLayer
,作为支持文件附在本示例中,将PReLU操作应用于输入数据。金宝app要访问这个层,打开这个示例作为一个活动脚本。
创建一个层的实例,并检查其有效性使用checkLayer
.将有效输入大小指定为该层的典型输入的单个观测值的大小。该层需要4-D阵列输入,其中前三个维度对应于前一层输出的高度、宽度和通道数,第四个维度对应于观测值。
指定观测值输入的典型大小,并设置“ObservationDimension”
选项4。要检查代码生成兼容性,请设置CheckCodegenCompatibility
选项真正的
.的checkLayer
函数不检查与代码生成不兼容的函数。要检查自定义层定义是否支持代码生成,首先使用金宝app代码生成准备更多信息,请参见使用代码生成准备工具检查代码(MATLAB编码器).
layer = 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.67454秒。
该函数不检测层的任何问题。
输入参数
层
- - - - - -要检查的图层
nnet.layer.Layer
对象|nnet.layer.ClassificationLayer
对象|nnet.layer.RegressionLayer
对象
要检查的层,指定为annnet.layer.Layer
,nnet.layer.ClassificationLayer
,nnet.layer.RegressionLayer
,或FunctionLayer
对象。
如果层
具有可学习或状态参数,则必须初始化该层。如果图层有自定义初始化
函数,然后首先使用初始化函数初始化该层networkDataLayout
对象。
的checkLayer
函数不支持继承的层金宝appnnet.layer.Formattable
.
有关如何定义自定义图层的示例,请参见定义具有可学习参数的自定义深度学习层.要创建应用指定函数的图层,请使用functionLayer
.
validInputSize
- - - - - -有效的输入大小
正整数向量|正整数向量的单元数组
层的有效输入大小,指定为正整数向量或正整数向量的单元数组。
对于具有单个输入的层,请指定
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
ObservationDimension
- - - - - -观察维度
正整数
观察维度,指定为正整数。
观测维度指定了层输入数据的哪个维度对应于观测值。例如,如果层期望输入数据的大小h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c分别对应输入数据的高度、宽度和通道数N对应观测个数,则观测维数为4。有关更多信息,请参见图层输入大小.
如果指定了观察维度,则checkLayer
函数使用大小为1和2的小批量生成的数据检查层函数是否有效。如果未指定观察维度,则该函数将跳过相应的测试。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
CheckCodegenCompatibility
- - - - - -启用代码生成测试的标志
0
(假)(默认)|1
(真正的)
启用代码生成测试的标志,指定为0
(虚假的)或1
(真正的)。
如果CheckCodegenCompatibility
是1
(true),则必须指定ObservationDimension
选择。
代码生成只支持2d图像或特征输入金宝app的中间层。代码生成不支持带有状态属性的层(带有属性的属性)金宝app状态
).
的checkLayer
函数不检查层使用的函数是否与代码生成兼容。要检查自定义层使用的函数是否也支持代码生成,首先使用金宝app代码生成准备更多信息,请参见使用代码生成准备工具检查代码(MATLAB编码器).
有关演示如何定义支持代码生成的自定义层的示例,请参见金宝app为代码生成定义自定义深度学习层.
数据类型:逻辑
更多关于
图层输入大小
对于每一层,有效的输入大小和观测维数取决于前一层的输出。
对于中间层(层的类型)nnet.layer.Layer
),有效输入大小和观测维数取决于输入到层的数据类型。
对于具有单个输入的层,请指定
validInputSize
作为与输入数据的维数相对应的整数向量。对于具有多个输入的层,请指定
validInputSize
作为向量的单元数组,其中每个向量对应一个层输入,向量的元素对应相应输入数据的维数。
对于大的输入大小,梯度检查需要更长的时间来运行。为加快检查速度,请指定较小的有效输入大小。
层的输入 | 输入的大小 | 观察维度 |
---|---|---|
特征向量 | c——- - - - - -N,在那里c对应于通道数和N是观察的次数 | 2 |
二维图像 | h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c分别对应图像的高度、宽度和通道数N是观察的次数 | 4 |
三维图像 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N,在那里h,w,d,c分别对应三维图像的高度、宽度、深度和通道数N是观察的次数 | 5 |
向量序列 | c——- - - - - -N——- - - - - -年代,在那里c是序列的特征个数,N是观察的次数,和年代是序列长度 | 2 |
二维图像序列 | h——- - - - - -w——- - - - - -c——- - - - - -N——- - - - - -年代,在那里h,w,c分别对应图像的高度、宽度和通道数,N是观察的次数,和年代是序列长度 | 4 |
三维图像序列 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N——- - - - - -年代,在那里h,w,d,c分别对应三维图像的高度、宽度、深度和通道数,N是观察的次数,和年代是序列长度 | 5 |
例如,对于二维图像分类问题,设置validInputSize
来[qh]
,在那里h
,w
,c
分别对应图像的高度、宽度和通道数ObservationDimension
来4
.
代码生成只支持2d图像输入的中间金宝app层。
对于输出层(类型为nnet.layer.ClassificationLayer
或nnet.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
是班数,和ObservationDimension
来4
.
对于回归问题,的维数Y
也取决于问题的类型。的尺寸如下表所示Y
.
回归的任务 | 输入的大小 | 观察维度 |
---|---|---|
二维图像回归 | 1-by-1-by -R——- - - - - -N,在那里R回复的数量是多少N是观察的次数 | 4 |
二维图像到图像的回归 | h——- - - - - -w——- - - - - -c——- - - - - -N,在那里h,w,c输出的高度、宽度和通道数分别是,和N是观察的次数 | 4 |
三维图像回归 | 1-by-1-by-1-by -R——- - - - - -N,在那里R回复的数量是多少N是观察的次数 | 5 |
三维图像到图像的回归 | h——- - - - - -w——- - - - - -d——- - - - - -c——- - - - - -N,在那里h,w,d,c输出的高度、宽度、深度和通道数分别是,和N是观察的次数 | 5 |
Sequence-to-one回归 | R——- - - - - -N,在那里R回复的数量是多少N是观察的次数 | 2 |
Sequence-to-sequence回归 | R——- - - - - -N——- - - - - -年代,在那里R为响应数,N是观察的次数,和年代是序列长度 | 2 |
例如,对于二维图像回归问题,设置validInputSize
来[11]
,在那里R
是回应的数量,和ObservationDimension
来4
.
算法
测试列表
的checkLayer
函数通过执行以下表中所述的一系列测试来检查自定义层的有效性。使用的测试的详细信息checkLayer
,请参阅检查自定义图层的有效性.
的checkLayer
函数使用这些测试来检查自定义中间层(类型为的层)的有效性nnet.layer.Layer
).
测试 | 描述 |
---|---|
functionSyntaxesAreCorrect |
正确定义了层函数的语法。 |
predictDoesNotError |
预测 函数不会出错。 |
forwardDoesNotError |
指定后, |
forwardPredictAreConsistentInSize |
当 |
backwardDoesNotError |
当指定时,落后的 不会出错。 |
backwardIsConsistentInSize |
当
|
predictIsConsistentInType |
的输出 |
forwardIsConsistentInType |
当 |
backwardIsConsistentInType |
当 |
gradientsAreNumericallyCorrect |
当落后的 ,则在落后的 与数值梯度一致。 |
backwardPropagationDoesNotError |
当落后的 ,则可以使用自动微分计算导数。 |
predictReturnsValidStates |
对于具有state属性的层,预测 函数返回有效状态。 |
forwardReturnsValidStates |
对于具有state属性的层,向前 函数,如果指定,则返回有效状态。 |
resetStateDoesNotError |
对于具有state属性的层,resetState 函数,如果指定,则不会出错并将状态重置为有效状态。 |
codegenPragmaDefinedInClassDef |
的编译指示“% # codegen” 在类文件中指定代码生成。 |
layerProperties金宝appSupportCodegen |
层属性支持代码生成。金宝app |
predict金宝appSupportsCodegen |
预测 对代码生成有效。 |
doesNotHaveStateProperties |
对于代码生成,层没有状态属性。 |
functionLayer金宝appSupportsCodegen |
对于代码生成,层函数必须是路径上的命名函数Formattable 财产必须是0 (假)。 |
有些测试运行多次。这些测试还检查不同的数据类型和GPU兼容性:
predictIsConsistentInType
forwardIsConsistentInType
backwardIsConsistentInType
为了在GPU上执行层函数,这些函数必须支持type的输入和输出金宝appgpuArray
使用底层数据类型单
.
的checkLayer
函数使用这些测试来检查自定义输出层(类型为nnet.layer.ClassificationLayer
或nnet.layer.RegressionLayer
).
测试 | 描述 |
---|---|
forwardLossDoesNotError |
forwardLoss 不会出错。 |
backwardLossDoesNotError |
backwardLoss 不会出错。 |
forwardLossIsScalar |
的输出forwardLoss 是标量。 |
backwardLossIsConsistentInSize |
当backwardLoss 的输出backwardLoss 大小一致的:dLdY 和预测的大小一样吗Y . |
forwardLossIsConsistentInType |
的输出 |
backwardLossIsConsistentInType |
当 |
gradientsAreNumericallyCorrect |
当backwardLoss ,则在backwardLoss 数字是正确的。 |
backwardPropagationDoesNotError |
当backwardLoss ,则可以使用自动微分计算导数。 |
的forwardLossIsConsistentInType
和backwardLossIsConsistentInType
测试还检查GPU兼容性。为了在GPU上执行层函数,这些函数必须支持type的输入和输出金宝appgpuArray
使用底层数据类型单
.
版本历史
在R2018a中引入
第一MATLAB
在MATLAB中编写了一种常用的求解方法:
Esegui将在MATLAB中执行编译。I浏览器网页不支持命令MATLAB。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。