主要内容

convolution2dLayer

二维卷积层

描述

二维卷积层对二维输入应用滑动卷积滤波器。该层通过沿着输入垂直和水平移动滤波器和计算权重和输入的点积来卷积输入,然后添加一个偏置项。

层卷积的维数取决于层输入:

  • 对于二维图像输入(四维数据,对应于两个空间维度的像素,通道和观测值),该层在空间维度上进行卷积。

  • 对于二维图像序列输入(5维数据,对应于两个空间维度的像素、通道、观测值和时间步长),该层在两个空间维度上进行卷积。

  • 对于一维图像序列输入(四维数据,对应于一个空间维度的像素、通道、观测值和时间步长),该层在空间和时间维度上进行卷积。

创建

描述

= convolution2dLayer (filterSizenumFilters创建一个2-D卷积层并设置FilterSize而且NumFilters属性。

例子

= convolution2dLayer (filterSizenumFilters名称,值设置可选的DilationFactorNumChannels参数和初始化学习率和正则化,的名字属性使用名称-值对。要指定输入填充,请使用“填充”名称-值对参数。例如,convolution2dLayer(11, 96,“大步”4“填充”,1)创建一个带有96个大小过滤器的二维卷积层(11 11),一大步(4 - 4),并沿着层输入的所有边缘填充大小为1。可以指定多个名称-值对。将每个属性名用单引号括起来。

输入参数

全部展开

名称-值参数

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

在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字在报价。

例子:convolution2dLayer(16日“填充”,“相同”)创建一个具有16个大小过滤器的2-D卷积层[3 3]而且“相同”填充。在训练时,软件计算并设置填充的大小,使层输出与输入大小相同。

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

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

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

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

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

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

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

属性

全部展开

二维卷积

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

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

例子:5 [5]指定高为5、宽为5的筛选器。

此属性是只读的。

筛选器的数目,指定为正整数。这个数字对应于该层中连接到输入中相同区域的神经元数量。这个参数决定了层输出中通道(特征映射)的数量。

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

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

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

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

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

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

例子:3 [2]

要应用于输入边框的填充大小,以向量形式指定[t b l r]四个非负整数,其中t是填充到顶部,b是填充到底部,l填充应用于左侧,和r是应用于右侧的填充。

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

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

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

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

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

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

请注意

填充属性将在将来的版本中删除。使用PaddingSize代替。创建一个层时,使用“填充”名称-值对参数指定填充大小。

垂直和水平应用于输入边框的填充大小,指定为矢量[b]两个非负整数,其中一个填充是否应用于输入数据的顶部和底部b应用于左右两侧的填充。

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

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

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” 垫使用输入的镜像值,包括边缘值。

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” 使用输入的镜像值填充,不包括边缘值。

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|字符|字符串

此属性是只读的。

输入通道的数量,指定为下列之一:

  • “汽车”-在训练时自动确定输入通道数。

  • 正整数-为指定的输入通道数量配置层。NumChannels并且层中输入数据的通道数量必须匹配。例如,如果输入是RGB图像,则NumChannels一定是3。如果输入是带有16个滤波器的卷积层的输出,则NumChannels必须是16岁。

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

参数和初始化

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

  • “glorot”-使用Glorot初始化器初始化权重[4](也称为Xavier初始化器)。格洛洛特初始化器独立地从均值和方差为零的均匀分布中采样2/(numIn + numOut),在那里numIn = FilterSize(1)*FilterSize(2)*NumChannels而且numOut = FilterSize(1)*FilterSize(2)*NumFilters

  • “他”-使用He初始化式初始化权重[5].He初始化器样本来自均值和方差为零的正态分布2 / numIn,在那里numIn = FilterSize(1)*FilterSize(2)*NumChannels

  • “narrow-normal”-通过从均值为0,标准差为0.01的正态分布中独立抽样来初始化权重。

  • “零”-用0初始化权重。

  • “的”-用1初始化权重。

  • 函数句柄——使用自定义函数初始化权重。如果指定了函数句柄,则该函数必须为权重= func(sz),在那里深圳就是权重的大小。有关示例,请参见指定自定义权重初始化函数

时,层才初始化权重权重属性为空。

数据类型:字符|字符串|function_handle

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

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

  • “的”-用1初始化偏差。

  • “narrow-normal”-通过从均值为零、标准差为0.01的正态分布中独立抽样来初始化偏差。

  • 函数句柄-使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须为偏差= func(sz),在那里深圳是偏差的大小。

时,层才初始化偏差偏见属性为空。

数据类型:字符|字符串|function_handle

卷积层的层权重,指定为数值数组。

层权值是可学习的参数。属性可以直接指定权重的初始值权重层的属性。当你训练一个网络时,如果权重属性为非空,则trainNetwork使用权重属性作为初始值。如果权重那么,属性是空的trainNetwork属性指定的初始化式WeightsInitializer层的属性。

在训练时,权重是一个FilterSize (1)——- - - - - -FilterSize (2)——- - - - - -NumChannels——- - - - - -NumFilters数组中。

数据类型:|

卷积层的层偏置,指定为数值数组。

层偏差是可学习参数。当你训练一个网络时,如果偏见非空吗trainNetwork使用偏见属性作为初始值。如果偏见那么是空的trainNetwork所指定的初始化式BiasInitializer

在训练时,偏见是1x1by -NumFilters数组中。

数据类型:|

学习率和正则化

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

该软件将该因子乘以全局学习率,以确定该层权重的学习率。例如,如果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函数自动为具有name的层分配名称

数据类型:字符|字符串

此属性是只读的。

该层的输入数量。该层只接受单个输入。

数据类型:

此属性是只读的。

输入层的名称。该层只接受单个输入。

数据类型:细胞

此属性是只读的。

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

数据类型:

此属性是只读的。

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

数据类型:细胞

例子

全部折叠

创建一个带有96个过滤器的卷积层,每个过滤器的高和宽为11。在水平和垂直方向上使用4的步幅(步长)。

层=卷积2dlayer (11,96,“步”4)
layer = Convolution2DLayer with properties: Name: " Hyperparameters FilterSize: [11 11] NumChannels: 'auto' NumFilters: 96 Stride: [4 4] DilationFactor: [11] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性

函数中包含卷积层数组中。

图层= [imageInputLayer([28 28 1]) convolution2dLayer(5,20) reluLayer maxPooling2dLayer(2,“步”,2) fullyConnectedLayer(10) softmaxLayer classificationLayer]
2 " Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0 0] 3 " ReLU ReLU 4 " Max Pooling 2x2 Max Pooling with stride [2 2] and padding [0 0 0 0 0] 5 " Fully Connected 10 Fully Connected Layer 6 " Softmax Softmax 7 " Classification Output crossentropyex

若要指定权重和偏置初始化函数,请使用WeightsInitializer而且BiasInitializer属性分别。要直接指定权重和偏差,请使用权重而且偏见属性分别。

指定初始化函数

创建一个带有32个过滤器的卷积层,每个过滤器的高度和宽度为5,并指定weights初始化器为He初始化器。

filterSize = 5;numFilters = 32;层=卷积2dlayer (filterSize,numFilters,...“WeightsInitializer”“他”
layer = Convolution2DLayer with properties: Name: " Hyperparameters FilterSize: [5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性

注意权重而且偏见属性为空。在训练时,软件使用指定的初始化函数初始化这些属性。

指定自定义初始化函数

要为权重和偏差指定自己的初始化函数,请设置WeightsInitializer而且BiasInitializer属性设置为函数句柄。对于这些属性,指定函数句柄,将权重和偏差的大小作为输入并输出初始化值。

创建一个具有32个过滤器的卷积层,每个过滤器的高和宽为5,并指定初始化器,从标准偏差为0.0001的高斯分布中采样权重和偏差。

filterSize = 5;numFilters = 32;层=卷积2dlayer (filterSize,numFilters,...“WeightsInitializer”, @(sz) rand(sz) * 0.0001,...“BiasInitializer”, @(sz) rand(sz) * 0.0001)
layer = Convolution2DLayer with properties: Name: " Hyperparameters FilterSize: [5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性

再一次,权重而且偏见属性为空。在训练时,软件使用指定的初始化函数初始化这些属性。

直接指定权重和偏差

创建一个输出大小为10的全连接层,并设置权重和偏置为W而且b在MAT文件中Conv2dWeights.mat分别。

filterSize = 5;numFilters = 32;负载Conv2dWeights层=卷积2dlayer (filterSize,numFilters,...“重量”W,...“偏见”, b)
layer = Convolution2DLayer with properties: Name: " Hyperparameters FilterSize: [5 5] NumChannels: 3 NumFilters: 32 Stride: [1 1] DilationFactor: [1 1] PaddingMode: 'manual' PaddingSize: [0 0 0 0 0] PaddingValue: 0 Learnable Parameters Weights: [5x5x3x32 double] Bias: [1x1x32 double]显示所有属性

在这里,权重而且偏见属性包含指定的值。在训练时,如果这些属性非空,则软件使用指定的值作为初始权重和偏差。在这种情况下,软件不使用初始化函数。

假设输入的大小是28乘28乘1。创建一个带有16个过滤器的卷积层,每个过滤器的高为6,宽为4。设置水平和垂直步幅为4。

确保卷积完全覆盖输入。为了使卷积完全覆盖输入,水平和垂直的输出维度都必须是整数。如果水平输出维度为整数,则需要在图像的顶部和底部填充一行:(28 - 6+ 2 * 1)/4 + 1 = 7。对于垂直输出维度为整数,不需要补零:(28 - 4+ 2 * 0)/4 + 1 = 7。

构造卷积层。

layer = convolution2dLayer([6 4],16,“步”4“填充”1, [0])
layer = Convolution2DLayer with properties: Name: " Hyperparameters FilterSize: [6 4] NumChannels: 'auto' NumFilters: 16 Stride: [4 4] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [1 1 0 0] PaddingValue: 0 Learnable Parameters Weights: [] Bias:[]显示所有属性

算法

全部展开

参考文献

Y.勒丘恩,B.博瑟,J. S.丹可,D.亨德森,R. E.霍华德,W.哈伯德和L. D.杰克。"用反向传播网络进行手写数字识别"在神经信息处理系统研究进展2 (D. Touretzky编著)。旧金山:Morgan Kaufmann, 1990。

[2] LeCun, Y., L. Bottou, Y. Bengio, P. Haffner。基于梯度的学习应用于文档识别IEEE论文集.第86卷,第11期,1998年,第2278-2324页。

[3]墨菲,k.p.。机器学习:一个概率的视角.马萨诸塞州剑桥:麻省理工学院出版社,2012年。

格洛洛特,泽维尔,还有约书亚·本吉奥。《理解深度前馈神经网络训练的难度》在第十三届人工智能与统计国际会议论文集, 249 - 356。撒丁岛,意大利:AISTATS, 2010。

[5]何开明,张翔宇,任少卿,孙健。“深入研究整流器:在ImageNet分类上超越人类水平的性能。”在2015年IEEE计算机视觉国际会议论文集, 1026 - 1034。华盛顿:IEEE计算机视觉学会,2015。

扩展功能

版本历史

在R2016a中引入

全部展开

R2019a的行为发生了变化


1图片来源:卷积运算许可证