主要内容

groupedConvolution2dLayer

二维分组卷积层

自从R2019a

描述

二维分组卷积层将输入通道分成组,并应用滑动卷积滤波器。使用分组卷积层进行通道可分(也称为深度可分)卷积。

对于每一组,该层通过沿输入垂直和水平移动滤波器来卷积输入,并计算权重和输入的点积,然后添加一个偏置项。这一层独立地组合了每一组的卷积。如果组的数量等于通道的数量,那么这一层执行通道卷积。

创建

描述

例子

= groupedConvolution2dLayer (filterSizenumFiltersPerGroupnumGroups创建一个二维分组卷积层,并设置FilterSizeNumFiltersPerGroup,NumGroups属性。

例子

= groupedConvolution2dLayer (filterSizenumFiltersPerGroup, ' channel-wise ')为通道卷积(也称为深度卷积)创建一个层。在这种情况下,软件确定NumGroups培训时的财产。该语法相当于设置NumGroups到输入通道的数量。

例子

= groupedConvolution2dLayer (___名称,值设置可选的DilationFactor参数和初始化学习率和正则化,名字使用名称-值对的属性。要指定输入填充,使用“填充”名称-值对参数。例如,groupedConvolution2dLayer(5128 2“填充”,“相同”)创建一个2- d分组卷积层,包含2组128个大小的过滤器5 [5]并将输入填充到,使输出具有相同的大小。可以指定多个名称-值对。将每个属性名称用单引号括起来。

输入参数

全部展开

名称-值参数

使用逗号分隔的名称-值对参数来指定要沿图层输入的边缘添加的填充大小,或设置DilationFactor参数和初始化学习率和正则化,名字属性。将名字用单引号括起来。

例子:groupedConvolution2dLayer(5128 2“填充”,“相同”)创建一个2- d分组卷积层,包含2组128个大小的过滤器5 [5]并将输入填充到,使输出具有相同的大小。

输入边缘填充,指定为由逗号分隔的对“填充”其中一个值是:

  • “相同”-添加由软件在训练或预测时计算的大小填充,以便在步幅等于1时输出与输入具有相同的大小。如果步幅大于1,则输出大小为装天花板(inputSize /步),在那里inputSize是输入和的高度还是宽度是相应维度中的步幅。如果可能的话,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。如果必须垂直添加的填充值为奇数,则软件会在底部添加额外的填充。如果必须横向添加的填充值为奇数,则软件会在右侧添加额外的填充。

  • 非负整数p-添加大小的填充p到输入的所有边。

  • 向量[b]非负整数-添加大小的填充一个到输入和填充的大小的顶部和底部b向左和向右。

  • 向量[au:]非负整数-添加大小的填充t到顶端,b在底部,l在左边,还有r在输入的右边。

例子:“填充”,1在输入的顶部和底部添加一行填充,并在输入的左侧和右侧添加一列填充。

例子:“填充”,“相同”添加填充,使输出具有与输入相同的大小(如果stride等于1)。

属性

全部展开

分组卷积

过滤器的高度和宽度,指定为矢量[w h]两个正整数的,其中h是高度和w是宽度。FilterSize定义输入中神经元连接的局部区域的大小。

在创建图层时,您可以指定FilterSize作为标量,以便对高度和宽度使用相同的值。

例子:5 [5]指定高度为5、宽度为5的过滤器。

每个组的过滤器数量,指定为正整数。此属性决定了层输出中的通道数量。输出通道的数量为FiltersPerGroup * NumGroups

例子:10

组的数目,指定为正整数或“channel-wise”

如果NumGroups“channel-wise”,然后软件为通道卷积(也称为深度卷积)创建一个层。在这种情况下,层决定NumGroups培训时的财产。这个值相当于settingNumGroups到输入通道的数量。

组的数量必须平均划分层输入的通道数。

例子:2

垂直和水平遍历输入的步长,指定为矢量[b]两个正整数的,其中一个垂直步长是和b为水平步长。在创建图层时,您可以指定作为标量,以便对两个步长使用相同的值。

例子:3 [2]指定垂直步长为2,水平步长为3。

展开卷积(也称为亚历斯卷积)的因子,指定为向量[w h]两个正整数的,其中h是垂直扩张和w是水平膨胀。在创建图层时,您可以指定DilationFactor作为标量,以便对水平和垂直膨胀使用相同的值。

在不增加参数或计算数量的情况下,使用扩展卷积来增加层的接受域(层可以看到的输入区域)。

该层通过在每个过滤器元素之间插入零来扩展过滤器。膨胀因子决定对输入进行采样的步长,或等价地决定滤波器的上采样因子。它对应的有效过滤器尺寸为(过滤器的大小- 1) .*膨胀系数+ 1。例如,具有膨胀因子的3 × 3滤波器(2 - 2)相当于一个5 × 5的过滤器,元素之间为零。

例子:3 [2]

应用于输入边框的填充大小,指定为矢量[au:]四个非负整数,其中t是应用于顶部的填充,b是应用于底部的填充,l填充是否应用于左侧,和r是应用于右侧的填充。

创建图层时,使用“填充”名称-值对参数指定填充大小。

例子:[1 1 2 2]在顶部和底部添加一行填充,并在输入的左侧和右侧添加两列填充。

方法来确定填充大小,指定为“手动”“相同”

的值由软件自动设置PaddingMode基于“填充”创建图层时指定的值。

  • 如果你设置“填充”选项为标量或非负整数向量,则软件自动设置PaddingMode“手动”

  • 如果你设置“填充”选项“相同”,则软件自动设置PaddingMode“相同”并计算训练时填充的大小,以便当步幅等于1时,输出与输入具有相同的大小。如果步幅大于1,则输出大小为装天花板(inputSize /步),在那里inputSize是输入和的高度还是宽度是相应维度中的步幅。如果可能的话,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。如果必须垂直添加的填充值为奇数,则软件会在底部添加额外的填充。如果必须横向添加的填充值为奇数,则软件会在右侧添加额外的填充。

值用于填充数据,指定为以下之一:

PaddingValue 描述 例子
标量 使用指定的标量值填充。

3. 1 4 1 5 9 2 6 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3. 1 4 0 0 0 0 1 5 9 0 0 0 0 2 6 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

“symmetric-include-edge” Pad使用镜像值输入,包括边值。

3. 1 4 1 5 9 2 6 5 5 1 1 5 9 9 5 1 3. 3. 1 4 4 1 1 3. 3. 1 4 4 1 5 1 1 5 9 9 5 6 2 2 6 5 5 6 6 2 2 6 5 5 6 5 1 1 5 9 9 5

“symmetric-exclude-edge” Pad使用输入的镜像值,不包括边缘值。

3. 1 4 1 5 9 2 6 5 5 6 2 6 5 6 2 9 5 1 5 9 5 1 4 1 3. 1 4 1 3. 9 5 1 5 9 5 1 5 6 2 6 5 6 2 9 5 1 5 9 5 1 4 1 3. 1 4 1 3.

“复制” 垫使用重复的边界元素的输入

3. 1 4 1 5 9 2 6 5 3. 3. 3. 1 4 4 4 3. 3. 3. 1 4 4 4 3. 3. 3. 1 4 4 4 1 1 1 5 9 9 9 2 2 2 6 5 5 5 2 2 2 6 5 5 5 2 2 2 6 5 5 5

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

每个组的通道数,指定为“汽车”或者一个正整数。每组的通道数等于输入通道数除以组数。

软件在训练时自动设置此属性。

例子:256

参数和初始化

函数初始化权重,指定为以下之一:

  • “glorot”-使用gloot初始化器初始化权重[1](也称为Xavier初始化器)。gloot初始化器从均值和方差均为零的均匀分布中独立采样2/(numIn + numOut),在那里numIn = FilterSize(1)*FilterSize(2)*NumChannelsPerGroupnumOut = 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

函数初始化偏差,指定为以下之一:

  • “零”-用零初始化偏差。

  • “的”-用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数组中。

数据类型:|

学习率和正则化

权重的学习率因子,指定为非负标量。

软件将这个因子乘以全局学习率来确定这一层权重的学习率。例如,如果WeightLearnRateFactor2,则该层中权重的学习率是当前全局学习率的两倍。软件根据您指定的设置来确定全局学习率trainingOptions函数。

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

偏差的学习率因子,指定为非负标量。

软件将这个因子乘以全局学习率来确定这一层偏差的学习率。例如,如果BiasLearnRateFactor2,则该层中偏差的学习率是当前全局学习率的两倍。软件根据您指定的设置来确定全局学习率trainingOptions函数。

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

l2权重的正则化因子,指定为非负标量。

软件将这个因子乘以全局l2正则化因子来确定l2这一层权值的正则化。例如,如果WeightL2Factor2,然后是l2这一层权重的正则化是全局的两倍l2正则化因子。您可以指定全局l2正则化因子trainingOptions函数。

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

l2偏差的正则化因子,指定为非负标量。

软件将这个因子乘以全局l2正则化因子来确定l2对这一层的偏差进行正则化。例如,如果BiasL2Factor2,然后是l2这一层偏差的正则化是全局的两倍l2正则化因子。软件决定全局l2属性指定的设置的正则化因子trainingOptions函数。

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

图层名称,指定为字符向量或字符串标量。为数组输入trainNetworkassembleNetworklayerGraph,dlnetwork函数会自动将名称分配给具有该名称的层

数据类型:字符|字符串

该属性是只读的。

层的输入数。这一层只接受一个输入。

数据类型:

该属性是只读的。

输入图层的名称。这一层只接受一个输入。

数据类型:细胞

该属性是只读的。

层的输出数。这一层只有一个输出。

数据类型:

该属性是只读的。

输出图层的名称。这一层只有一个输出。

数据类型:细胞

例子

全部折叠

创建一个分组卷积层,包含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];

算法

全部展开

参考文献

格罗洛特、泽维尔和约书亚·本吉奥。“理解训练深度前馈神经网络的难度。”在第十三届国际人工智能与统计会议论文集, 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

扩展功能

版本历史

在R2019a中引入