groupedConvolution2dLayer
描述
二维分组卷积层将输入通道分成组,并应用滑动卷积滤波器。使用分组卷积层进行通道可分(也称为深度可分)卷积。
对于每一组,该层通过沿输入垂直和水平移动滤波器来卷积输入,并计算权重和输入的点积,然后添加一个偏置项。这一层独立地组合了每一组的卷积。如果组的数量等于通道的数量,那么这一层执行通道卷积。
创建
语法
描述
创建一个二维分组卷积层,并设置层
= groupedConvolution2dLayer (filterSize
,numFiltersPerGroup
,numGroups
)FilterSize
,NumFiltersPerGroup
,NumGroups
属性。
输入参数
使用逗号分隔的名称-值对参数来指定要沿图层输入的边缘添加的填充大小,或设置步
,DilationFactor
,参数和初始化,学习率和正则化,名字
属性。将名字用单引号括起来。
例子:groupedConvolution2dLayer(5128 2“填充”,“相同”)
创建一个2- d分组卷积层,包含2组128个大小的过滤器5 [5]
并将输入填充到,使输出具有相同的大小。
填充
- - - - - -输入边填充
[00 00 00 00]
(默认)|非负整数向量|“相同”
输入边缘填充,指定为由逗号分隔的对“填充”
其中一个值是:
“相同”
-添加由软件在训练或预测时计算的大小填充,以便在步幅等于1时输出与输入具有相同的大小。如果步幅大于1,则输出大小为装天花板(inputSize /步)
,在那里inputSize
是输入和的高度还是宽度步
是相应维度中的步幅。如果可能的话,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。如果必须垂直添加的填充值为奇数,则软件会在底部添加额外的填充。如果必须横向添加的填充值为奇数,则软件会在右侧添加额外的填充。非负整数
p
-添加大小的填充p
到输入的所有边。向量
[b]
非负整数-添加大小的填充一个
到输入和填充的大小的顶部和底部b
向左和向右。向量
[au:]
非负整数-添加大小的填充t
到顶端,b
在底部,l
在左边,还有r
在输入的右边。
例子:“填充”,1
在输入的顶部和底部添加一行填充,并在输入的左侧和右侧添加一列填充。
例子:“填充”,“相同”
添加填充,使输出具有与输入相同的大小(如果stride等于1)。
属性
分组卷积
FilterSize
- - - - - -过滤器的高度和宽度
两个正整数的向量
过滤器的高度和宽度,指定为矢量[w h]
两个正整数的,其中h
是高度和w
是宽度。FilterSize
定义输入中神经元连接的局部区域的大小。
在创建图层时,您可以指定FilterSize
作为标量,以便对高度和宽度使用相同的值。
例子:5 [5]
指定高度为5、宽度为5的过滤器。
NumFiltersPerGroup
- - - - - -每个组的过滤器数量
正整数
每个组的过滤器数量,指定为正整数。此属性决定了层输出中的通道数量。输出通道的数量为FiltersPerGroup * NumGroups
。
例子:10
NumGroups
- - - - - -组数
正整数|“channel-wise”
组的数目,指定为正整数或“channel-wise”
。
如果NumGroups
是“channel-wise”
,然后软件为通道卷积(也称为深度卷积)创建一个层。在这种情况下,层决定NumGroups
培训时的财产。这个值相当于settingNumGroups
到输入通道的数量。
组的数量必须平均划分层输入的通道数。
例子:2
步
- - - - - -遍历输入的步长
[1]
(默认)|两个正整数的向量
垂直和水平遍历输入的步长,指定为矢量[b]
两个正整数的,其中一个
垂直步长是和b
为水平步长。在创建图层时,您可以指定步
作为标量,以便对两个步长使用相同的值。
例子:3 [2]
指定垂直步长为2,水平步长为3。
DilationFactor
- - - - - -扩张卷积因子
[1]
(默认)|两个正整数的向量
展开卷积(也称为亚历斯卷积)的因子,指定为向量[w h]
两个正整数的,其中h
是垂直扩张和w
是水平膨胀。在创建图层时,您可以指定DilationFactor
作为标量,以便对水平和垂直膨胀使用相同的值。
在不增加参数或计算数量的情况下,使用扩展卷积来增加层的接受域(层可以看到的输入区域)。
该层通过在每个过滤器元素之间插入零来扩展过滤器。膨胀因子决定对输入进行采样的步长,或等价地决定滤波器的上采样因子。它对应的有效过滤器尺寸为(过滤器的大小- 1) .*膨胀系数+ 1。例如,具有膨胀因子的3 × 3滤波器(2 - 2)
相当于一个5 × 5的过滤器,元素之间为零。
例子:3 [2]
PaddingSize
- - - - - -填充尺寸
[00 00 00 00]
(默认)|四个非负整数的向量
应用于输入边框的填充大小,指定为矢量[au:]
四个非负整数,其中t
是应用于顶部的填充,b
是应用于底部的填充,l
填充是否应用于左侧,和r
是应用于右侧的填充。
创建图层时,使用“填充”
名称-值对参数指定填充大小。
例子:[1 1 2 2]
在顶部和底部添加一行填充,并在输入的左侧和右侧添加两列填充。
PaddingMode
- - - - - -方法确定填充大小
“手动”
(默认)|“相同”
方法来确定填充大小,指定为“手动”
或“相同”
。
的值由软件自动设置PaddingMode
基于“填充”
创建图层时指定的值。
如果你设置
“填充”
选项为标量或非负整数向量,则软件自动设置PaddingMode
来“手动”
。如果你设置
“填充”
选项“相同”
,则软件自动设置PaddingMode
来“相同”
并计算训练时填充的大小,以便当步幅等于1时,输出与输入具有相同的大小。如果步幅大于1,则输出大小为装天花板(inputSize /步)
,在那里inputSize
是输入和的高度还是宽度步
是相应维度中的步幅。如果可能的话,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。如果必须垂直添加的填充值为奇数,则软件会在底部添加额外的填充。如果必须横向添加的填充值为奇数,则软件会在右侧添加额外的填充。
PaddingValue
- - - - - -对pad数据的值
0(默认)|标量|“symmetric-include-edge”
|“symmetric-exclude-edge”
|“复制”
值用于填充数据,指定为以下之一:
PaddingValue |
描述 | 例子 |
---|---|---|
标量 | 使用指定的标量值填充。 |
|
“symmetric-include-edge” |
Pad使用镜像值输入,包括边值。 |
|
“symmetric-exclude-edge” |
Pad使用输入的镜像值,不包括边缘值。 |
|
“复制” |
垫使用重复的边界元素的输入 |
|
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|字符
|字符串
NumChannelsPerGroup
- - - - - -每个组的通道数
“汽车”
(默认)|正整数
每个组的通道数,指定为“汽车”
或者一个正整数。每组的通道数等于输入通道数除以组数。
软件在训练时自动设置此属性。
例子:256
参数和初始化
WeightsInitializer
- - - - - -初始化权重的函数
“glorot”
(默认)|“他”
|“narrow-normal”
|“零”
|“的”
|函数处理
函数初始化权重,指定为以下之一:
“glorot”
-使用gloot初始化器初始化权重[1](也称为Xavier初始化器)。gloot初始化器从均值和方差均为零的均匀分布中独立采样2/(numIn + numOut)
,在那里numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroup
和numOut = FilterSize(1)*FilterSize(2)*NumFiltersPerGroup
。“他”
-使用He初始化器初始化权重[2]。He初始化器从均值和方差均为零的正态分布中采样2 / numIn
,在那里numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroup
。“narrow-normal”
—通过从平均值为零、标准差为0.01的正态分布中独立采样来初始化权重。“零”
—初始化权值为0。“的”
—初始化权重为1。函数句柄-使用自定义函数初始化权重。如果指定函数句柄,则该函数必须为
权重= func(sz)
,在那里深圳
是权重的大小。使用示例请参见指定自定义权重初始化函数。
层只初始化权重权重
房产是空的。
数据类型:字符
|字符串
|function_handle
BiasInitializer
- - - - - -初始化偏差的函数
“零”
(默认)|“narrow-normal”
|“的”
|函数处理
函数初始化偏差,指定为以下之一:
“零”
-用零初始化偏差。“的”
-用1初始化偏差。“narrow-normal”
—通过从均值为0,标准差为0.01的正态分布中独立采样来初始化偏差。函数句柄-用自定义函数初始化偏差。如果指定函数句柄,则该函数必须为
偏差= func(sz)
,在那里深圳
是偏差的大小。
层只初始化偏差,当偏见
房产是空的。
数据类型:字符
|字符串
|function_handle
权重
- - - - - -层的重量
[]
(默认)|数字数组
层的层权重,指定为数值数组。
层权值是可学习的参数。方法指定权重的初始值权重
层的属性。当你训练一个网络时,如果权重
则层的属性是非空的trainNetwork
使用权重
属性作为初始值。如果权重
那么,房地产是空的trainNetwork
类指定的初始化项WeightsInitializer
层的属性。
在训练时,权重
是一个FilterSize (1)
——- - - - - -FilterSize (2)
——- - - - - -NumChannelsPerGroup
——- - - - - -NumFiltersPerGroup
——- - - - - -NumGroups
数组,NumInputChannels
为层输入的通道数。
数据类型:单
|双
偏见
- - - - - -层的偏见
[]
(默认)|数字数组
层的层偏差,指定为数值数组。
层偏差是可学习的参数。当你训练一个神经网络时,如果偏见
是非空的trainNetwork
使用偏见
属性作为初始值。如果偏见
那么它是空的trainNetwork
指定的初始化项BiasInitializer
。
在训练时,偏见
是1 × 1 × -NumFiltersPerGroup
——- - - - - -NumGroups
数组中。
数据类型:单
|双
学习率和正则化
WeightLearnRateFactor
- - - - - -权重的学习率因子
1
(默认)|负的标量
权重的学习率因子,指定为非负标量。
软件将这个因子乘以全局学习率来确定这一层权重的学习率。例如,如果WeightLearnRateFactor
是2
,则该层中权重的学习率是当前全局学习率的两倍。软件根据您指定的设置来确定全局学习率trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
BiasLearnRateFactor
- - - - - -偏差的学习率因子
1
(默认)|负的标量
偏差的学习率因子,指定为非负标量。
软件将这个因子乘以全局学习率来确定这一层偏差的学习率。例如,如果BiasLearnRateFactor
是2
,则该层中偏差的学习率是当前全局学习率的两倍。软件根据您指定的设置来确定全局学习率trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
WeightL2Factor
- - - - - -l2权重的正则化因子
1(默认)|负的标量
l2权重的正则化因子,指定为非负标量。
软件将这个因子乘以全局l2正则化因子来确定l2这一层权值的正则化。例如,如果WeightL2Factor
是2
,然后是l2这一层权重的正则化是全局的两倍l2正则化因子。您可以指定全局l2正则化因子trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
BiasL2Factor
- - - - - -l2偏差的正则化因子
0
(默认)|负的标量
l2偏差的正则化因子,指定为非负标量。
软件将这个因子乘以全局l2正则化因子来确定l2对这一层的偏差进行正则化。例如,如果BiasL2Factor
是2
,然后是l2这一层偏差的正则化是全局的两倍l2正则化因子。软件决定全局l2属性指定的设置的正则化因子trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
层
名字
- - - - - -层的名字
”
(默认)|特征向量|字符串标量
图层名称,指定为字符向量或字符串标量。为层
数组输入trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数会自动将名称分配给具有该名称的层”
。
数据类型:字符
|字符串
NumInputs
- - - - - -输入数
1
(默认)
该属性是只读的。
层的输入数。这一层只接受一个输入。
数据类型:双
InputNames
- - - - - -输入名字
{"在"}
(默认)
该属性是只读的。
输入图层的名称。这一层只接受一个输入。
数据类型:细胞
NumOutputs
- - - - - -输出数量
1
(默认)
该属性是只读的。
层的输出数。这一层只有一个输出。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
(默认)
该属性是只读的。
输出图层的名称。这一层只有一个输出。
数据类型:细胞
例子
创建分组卷积层
创建一个分组卷积层,包含3组10个过滤器,每个过滤器的高度和宽度为11,以及名称“gconv1”
。
layer = groupedConvolution2dLayer(11,10,3,“名字”,“gconv1”)
layer = GroupedConvolution2DLayer with properties: Name: 'gconv1' Hyperparameters FilterSize: [11 11] NumGroups: 3 NumChannelsPerGroup: 'auto' NumFiltersPerGroup: 10 Stride: [11] DilationFactor: [11] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性
创建通道卷积层
创建一个channel-wise convolutional(也称为depth-wise convolutional)层,每组10个过滤器,每个过滤器的高度和宽度为11,并命名为“cwconv1”
。
layer = groupedConvolution2dLayer(11,10,“channel-wise”,“名字”,“cwconv1”)
layer = GroupedConvolution2DLayer with properties: Name: 'cwconv1' Hyperparameters FilterSize: [11 11] NumGroups: 'channel-wise' NumChannelsPerGroup: 'auto' NumFiltersPerGroup: 10 Stride: [11] DilationFactor: [11] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性
为通道可分离卷积创建层
典型的卷积神经网络包含卷积块、批处理归一化和ReLU层。例如,
filterSize = 3;numFilters = 16;conlayers = [convolution2dLayer(filterSize,numFilters,“步”2,“填充”,“相同”) batchNormalizationLayer reluLayer];
对于通道方向的可分离卷积(也称为深度方向的可分离卷积),用通道方向的卷积和点方向的卷积块替换卷积块。
指定过滤器大小和通道方向卷积中的步幅以及点方向卷积中的过滤器数量。对于通道卷积,为每个组指定一个过滤器。对于逐点卷积,指定大小为1的过滤器convolution2dLayer
。
cwsConvLayers = [groupedConvolution2dLayer(filterSize,1,“channel-wise”,“步”2,“填充”,“相同”) batchNormalizationLayer reluLayer convolution2dLayer(1,numFilters,“填充”,“相同”) batchNormalizationLayer reluLayer];
创建一个包含通道可分离卷积层的网络。
layers = [imageInputLayer([227227])卷积2dlayer (3,32,“填充”,“相同”) batchNormalizationLayer reluLayer groupedConvolution2dLayer(3,1,“channel-wise”,“步”2,“填充”,“相同”) batchNormalizationLayer reluLayer卷积2dlayer (1,16,“填充”,“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(2,“步”,2) fulllyconnectedlayer (5) softmaxLayer classificationLayer];
算法
图层输入和输出格式
层数组或层图中的层以格式化的方式将数据传递给后续层dlarray
对象。的格式dlarray
对象是一个字符串,其中每个字符描述数据的相应维度。格式由以下一个或多个字符组成:
“S”
——空间“C”
——频道“B”
——批“T”
——时间“U”
——未指明的
例如,表示为4d数组的二维图像数据,其中前两个维度对应于图像的空间维度,第三个维度对应于图像的通道,第四个维度对应于批处理维度,可以描述为具有格式“SSCB”
(空间、空间、通道、批量)。
你可以与它们互动dlarray
对象在自动区分工作流中,例如开发自定义层,使用functionLayer
对象,或使用向前
和预测
功能与dlnetwork
对象。
的支持输入格式金宝appGroupedConvolution2DLayer
对象和相应的输出格式。如果将层的输出传递给不继承自的自定义层nnet.layer.Formattable
类,或者FunctionLayer
对象。Formattable
属性设置为0
(false),则该层接收一个未格式化的dlarray
对象,其维度顺序与该表中的格式相对应。
输入格式 | 输出格式 |
---|---|
|
|
|
|
在dlnetwork
对象,GroupedConvolution2DLayer
对象还支持这些输入和输出格金宝app式组合。
输入格式 | 输出格式 |
---|---|
|
|
|
|
参考文献
格罗洛特、泽维尔和约书亚·本吉奥。“理解训练深度前馈神经网络的难度。”在第十三届国际人工智能与统计会议论文集, 249 - 356。撒丁岛,意大利:AISTATS, 2010。https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
[10]何凯,张翔宇,任少卿,孙健。“深入研究整流器:在ImageNet分类上超越人类水平的表现。”在2015 IEEE计算机视觉国际会议论文集, 1026 - 1034。华盛顿特区:IEEE计算机视觉学会,2015。https://doi.org/10.1109/ICCV.2015.123
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
的2-D分组卷积层不支持ARM计算库的代码生成金宝app
NumGroups
属性设置为大于2的整数值。对于代码生成
PaddingValue
参数必须等于0
,为默认值。
GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
使用注意事项和限制:
的2-D分组卷积层不支持ARM Mali GPU的代码生成金宝app
NumGroups
属性设置为“channel-wise”
或者大于2的值。对于代码生成
PaddingValue
参数必须等于0
,为默认值。
版本历史
在R2019a中引入
MATLAB命令
您点击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。