主要内容

convolution3dLayer

三维卷积层

描述

三维卷积层将滑动立方卷积滤波器应用于三维输入。该层通过沿着输入垂直、水平和深度移动滤波器来卷积输入,计算权值和输入的点积,然后添加一个偏差项。

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

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

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

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

创建

描述

= convolution3dLayer (filterSizenumFilters创建一个三维卷积层,并设置FilterSize而且NumFilters属性。

例子

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

输入参数

全部展开

名称-值参数

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

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

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

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

  • “相同”-在训练或预测时添加软件计算的大小填充,使步幅为1时输出与输入大小相同。如果stride大于1,则输出大小为装天花板(inputSize /步),在那里inputSize输入的高度、宽度或深度是和是对应维度中的步幅。如果可能的话,软件会在顶部和底部、左边和右边、前面和后面添加相同数量的填充。如果给定维度中的填充值为奇数,则软件将额外的填充添加到输入中作为延迟添加。换句话说,该软件在底部增加了额外的垂直填充,在右边增加了额外的水平填充,在输入的后面增加了额外的深度填充。

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

  • 三元素向量(a b c)的非负整数-添加大小填充一个到顶部和底部,填充大小b向左和向右,填充大小c前面和后面的输入。

  • 2×3矩阵[t l f;b r k]的非负整数-添加大小填充t前,b底部,l到左边,r向右,f到前面去,然后k到输入的后面。换句话说,第一行指定了预加法,第二行定义了三个维度中的后加法。

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

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

属性

全部展开

三维卷积

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

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

例子:(5 5 5)指定高度、宽度和深度为5的过滤器。

此属性是只读的。

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

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

在三维中遍历输入的步长,指定为向量(a b c)三个正整数的一个是竖直步长,b是水平步长,和c是沿着深度的步长。在创建层时,您可以指定作为一个标量,在所有三个方向上使用相同的步长值。

例子:(1 2 3)指定垂直步长为2,水平步长为3,沿深度为1的步长。

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

放大卷积(也称为阿特鲁卷积)的因子,表示为一个向量[w h d]三个正整数的h是垂直膨胀,w是水平扩张,和d是沿深度的膨胀。在创建层时,您可以指定DilationFactor作为一个标量,在所有三个方向上使用相同的值进行膨胀。

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

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

例子:(1 2 3)将过滤器纵向放大2倍,横向放大3倍,沿深度放大1倍。

应用于输入边框的填充大小,指定为2 × 3矩阵[t l f;b r k]非负整数的t而且b填充物是垂直方向涂在顶部和底部的吗?l而且r填充是否应用到水平方向的左侧和右侧f而且k是填充物应用到前面和后面沿深度。换句话说,第一行指定了预加法,第二行定义了三个维度中的后加法。

创建图层时,使用“填充”参数指定填充大小。

例子:[1 2 4;1 2 4]在顶部和底部添加一行填充,在左侧和右侧添加两列填充,在输入的前后添加四个平面填充。

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

软件会自动设置PaddingMode基于创建图层时指定的Padding值。

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

  • 如果你设置“填充”选项“相同”,然后软件自动设置PaddingMode“相同”并在训练时计算填充的大小,以便当步幅为1时输出与输入的大小相同。如果stride大于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” 使用输入的镜像值(包括边值)进行填充。

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

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

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

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

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

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

时,该层才初始化权重权重属性是空的。

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

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

  • “零”-初始偏差为零。

  • “的”-初始偏差为1。

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

  • 函数句柄——使用自定义函数初始化偏置。如果指定了函数句柄,则该函数必须具有以下形式偏见= func(深圳),在那里深圳是偏差的大小。

该层仅在偏见属性是空的。

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

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

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

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

数据类型:|

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

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

在培训时,偏见是一个1-by-1-by-1-by——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函数自动为具有此名称的层分配名称

数据类型:字符|字符串

此属性是只读的。

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

数据类型:

此属性是只读的。

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

数据类型:细胞

此属性是只读的。

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

数据类型:

此属性是只读的。

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

数据类型:细胞

例子

全部折叠

创建一个具有16个过滤器的3d卷积层,每个过滤器的高度、宽度和深度为5。三个方向的步幅(步长)均为4。

16层= convolution3dLayer(5日,“步”4)
名称:" Hyperparameters FilterSize: [5 5 5] NumChannels: 'auto' NumFilters: 16 Stride: [4 4 4] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [2x3 double] PaddingValue: 0可学习参数权重:[]Bias:[]显示所有属性

包含一个三维卷积层数组中。

层= [...image3dInputLayer([28 28 28 3])卷积3dlayer (5,16,“步”4) reluLayer maxPooling3dLayer (2“步”4) fullyConnectedLayer(10) softmaxLayer classificationLayer]
输入28x28x28x3图像与'零中心'归一化2 " 3d卷积16 5x5x5卷积与stride[4 4 4]和填充[0 0 0;0 0 0] 3 " ReLU ReLU 4 " 3- d最大池化2x2x2最大池化与stride[4 4 4]和填充[0 0 0;0 0 0] 5“全连接10全连接层6”Softmax Softmax 7”分类输出

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

指定初始化函数

创建一个带有32个过滤器的3-D卷积层,每个过滤器的高度、宽度和深度为5。将权重初始化式指定为He初始化式。

filterSize = 5;numFilters = 32;层= convolution3dLayer (filterSize numFilters,...“WeightsInitializer”“他”
名称:" Hyperparameters FilterSize: [5 5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1 1] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [2x3 double] PaddingValue: 0可学习参数Weights: [] Bias:[]显示所有属性

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

指定自定义初始化函数

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

创建一个包含32个过滤器的卷积层,每个过滤器的高、宽、深分别为5。指定从标准偏差为0.0001的高斯分布中抽样权重和偏差的初始化式。

filterSize = 5;numFilters = 32;层= convolution3dLayer (filterSize numFilters,...“WeightsInitializer”, @(sz)兰德(sz) * 0.0001,...“BiasInitializer”, @(sz)兰特(sz) * 0.0001)
名称:" Hyperparameters FilterSize: [5 5 5] NumChannels: 'auto' NumFilters: 32 Stride: [1 1 1] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [2x3 double] PaddingValue: 0可学习参数Weights: [] Bias:[]显示所有属性

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

直接指定权重和偏差

创建一个兼容彩色图像的三维卷积层。将权重和偏差设置为W而且b在MAT文件中Conv3dWeights.mat分别。

filterSize = 5;numFilters = 32;负载Conv3dWeights层= convolution3dLayer (filterSize numFilters,...“重量”W,...“偏见”, b)
layer = Convolution3DLayer with properties: Name: " Hyperparameters FilterSize: [5 5 5] NumChannels: 3 NumFilters: 32 Stride: [1 1 1] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [2x3 double] PaddingValue: 0可学习参数Weights: [5- d double] Bias: [1x1x1x32 double]显示所有属性

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

假设输入的大小是28乘28乘28乘28乘1。创建一个带有16个过滤器的3-D卷积层,每个过滤器的高度为6,宽度为4,深度为5。将所有维度的步幅设置为4。

确保卷积完全覆盖了输入。为了使卷积完全覆盖输入,输出维数必须是整数。当没有扩张时-输出维度计算为(imageSize() - filterSize () +填充()) /步() + 1。

  • 要使水平输出维度为整数,需要两行填充:(28 - 6 + 2)/4 + 1 = 7。通过在图像的顶部和底部添加一行填充对称地分布填充。

  • 对于垂直输出维度为整数,不需要填充:(28 - 4+ 0)/4 + 1 = 7。

  • 如果深度输出维度是一个整数,则需要一个填充平面:(28 - 5 + 1)/4 + 1 = 7。您必须在图像的前面和后面不对称地分配填充。这个例子在图像的后面添加了一个填充平面。

构造卷积层。指定“填充”作为一个2 × 3矩阵。第一行指定预添加,第二行指定在三个维度中延迟添加。

layer = convolution3dLayer([6 4 5],16,“步”,4,“填充”,[1 0 0;1 0 1])
Name: " Hyperparameters FilterSize: [6 4 5] NumChannels: 'auto' NumFilters: 16 Stride: [4 4 4] DilationFactor: [1 1 1] PaddingMode: 'manual' PaddingSize: [2x3 double] PaddingValue: 0可学习参数权重:[]Bias:[]显示所有属性

算法

全部展开

参考文献

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

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

版本历史

介绍了R2019a

Baidu
map