convolution3dLayer
三维卷积层
描述
三维卷积层将滑动立方卷积滤波器应用于三维输入。该层通过沿着输入垂直、水平和深度移动滤波器来卷积输入,计算权值和输入的点积,然后添加一个偏差项。
层卷积的维度取决于层输入:
对于三维图像输入(五个维度的数据对应于三个空间维度的像素、通道和观测),该层在空间维度上进行卷积。
对于三维图像序列输入(六维数据,对应于三个空间维度的像素、通道、观测和时间步长),该层在空间维度上进行卷积。
对于二维图像序列输入(五维数据,对应于两个空间维度的像素、通道、观测值和时间步长),该层在空间和时间维度上进行卷积。
创建
描述
创建一个三维卷积层,并设置层
= convolution3dLayer (filterSize
,numFilters
)FilterSize
而且NumFilters
属性。
设置可选层
= convolution3dLayer (filterSize
,numFilters
,名称,值
)步
,DilationFactor
,NumChannels
,参数和初始化,学习率和正规化,的名字
使用名称-值对的属性。方法指定输入填充“填充”
名称-值对的论点。例如,convolution3dLayer(11, 96,“大步”4“填充”,1)
创建了一个带有96个大小过滤器的三维卷积层(11 11 11)
,一大步(4 - 4)
,并沿输入层的所有边缘填充大小为1。可以指定多个名称-值对。将每个属性名用单引号括起来。
输入参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:convolution3dLayer(16日“填充”,“相同”)
创建了一个带有16个大小过滤器的三维卷积层(3 3 3)
而且“相同”
填充。在训练时,软件计算并设置填充的大小,使层输出与输入大小相同。
填充
- - - - - -输入边缘填充
0
(默认)|非负整数数组|“相同”
输入边填充,指定为逗号分隔的对,由“填充”
其中一个价值观是:
“相同”
-在训练或预测时添加软件计算的大小填充,使步幅为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)。
属性
三维卷积
FilterSize
- - - - - -过滤器的高度,宽度和深度
三个正整数的向量
过滤器的高度、宽度和深度,指定为一个向量[w h d]
三个正整数的h
的高度,w
是宽度,和d
是深度。FilterSize
定义输入中神经元连接到的局部区域的大小。
在创建层时,您可以指定FilterSize
作为标量,为高度、宽度和深度使用相同的值。
例子:(5 5 5)
指定高度、宽度和深度为5的过滤器。
NumFilters
- - - - - -数量的过滤器
正整数
此属性是只读的。
筛选器的数目,指定为正整数。这个数字对应于该层中连接到输入中同一区域的神经元数量。这个参数决定了层输出中通道(特征映射)的数量。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
步
- - - - - -遍历输入的步长
(1 1 1)
(默认)|三个正整数的向量
在三维中遍历输入的步长,指定为向量(a b c)
三个正整数的一个
是竖直步长,b
是水平步长,和c
是沿着深度的步长。在创建层时,您可以指定步
作为一个标量,在所有三个方向上使用相同的步长值。
例子:(1 2 3)
指定垂直步长为2,水平步长为3,沿深度为1的步长。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
DilationFactor
- - - - - -扩张卷积因子
(1 1 1)
(默认)|三个正整数的向量
放大卷积(也称为阿特鲁卷积)的因子,表示为一个向量[w h d]
三个正整数的h
是垂直膨胀,w
是水平扩张,和d
是沿深度的膨胀。在创建层时,您可以指定DilationFactor
作为一个标量,在所有三个方向上使用相同的值进行膨胀。
使用扩展卷积来增加层的接收域(层可以看到的输入区域),而不增加参数或计算的数量。
该层通过在每个过滤器元素之间插入零来扩展过滤器。膨胀因子决定了对输入采样的步长,或相当于滤波器的上采样因子。它对应的有效过滤器大小为(过滤器的大小- 1) *膨胀系数+ 1。例如,一个带有膨胀因子的3 × 3 × 3滤波器(2 2 2)
相当于一个5乘5乘5的过滤器,元素之间为零。
例子:(1 2 3)
将过滤器纵向放大2倍,横向放大3倍,沿深度放大1倍。
PaddingSize
- - - - - -大小的填充
[0 0 0;0 0 0]
(默认)|非负整数的2 × 3矩阵
应用于输入边框的填充大小,指定为2 × 3矩阵[t l f;b r k]
非负整数的t
而且b
填充物是垂直方向涂在顶部和底部的吗?l
而且r
填充是否应用到水平方向的左侧和右侧f
而且k
是填充物应用到前面和后面沿深度。换句话说,第一行指定了预加法,第二行定义了三个维度中的后加法。
创建图层时,使用“填充”
参数指定填充大小。
例子:[1 2 4;1 2 4]
在顶部和底部添加一行填充,在左侧和右侧添加两列填充,在输入的前后添加四个平面填充。
PaddingMode
- - - - - -方法来确定填充大小
“手动”
(默认)|“相同”
方法来确定填充大小,指定为“手动”
或“相同”
.
软件会自动设置PaddingMode
基于创建图层时指定的Padding值。
如果你设置
“填充”
选项设置为标量或非负整数的向量,然后软件自动设置PaddingMode
来“手动”
.如果你设置
“填充”
选项“相同”
,然后软件自动设置PaddingMode
来“相同”
并在训练时计算填充的大小,以便当步幅为1时输出与输入的大小相同。如果stride大于1,则输出大小为装天花板(inputSize /步)
,在那里inputSize
输入的高度、宽度或深度是和步
是对应维度中的步幅。如果可能的话,软件会在顶部和底部、左边和右边、前面和后面添加相同数量的填充。如果给定维度中的填充值为奇数,则软件将额外的填充添加到输入中作为延迟添加。换句话说,该软件在底部增加了额外的垂直填充,在右边增加了额外的水平填充,在输入的后面增加了额外的深度填充。
PaddingValue
- - - - - -填充数据的值
0(默认)|标量|“symmetric-include-edge”
|“symmetric-exclude-edge”
|“复制”
值填充数据,指定为以下之一:
PaddingValue |
描述 | 例子 |
---|---|---|
标量 | 填充指定的标量值。 |
|
“symmetric-include-edge” |
使用输入的镜像值(包括边值)进行填充。 |
|
“symmetric-exclude-edge” |
使用输入的镜像值(不包括边值)进行填充。 |
|
“复制” |
使用输入的重复边框元素填充 |
|
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|字符
|字符串
NumChannels
- - - - - -输入通道数
“汽车”
(默认)|正整数
此属性是只读的。
输入通道的数量,指定为以下之一:
“汽车”
—训练时自动确定输入通道数量。正整数-为指定的输入通道数量配置层。
NumChannels
并且层输入数据中的通道数量必须匹配。例如,如果输入是RGB图像,那么NumChannels
必须是3。如果输入是带有16个滤波器的卷积层的输出,那么NumChannels
必须是16。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|字符
|字符串
参数和初始化
WeightsInitializer
- - - - - -函数初始化权重
“glorot”
(默认)|“他”
|“narrow-normal”
|“零”
|“的”
|函数处理
函数初始化权重,指定为以下之一:
“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
BiasInitializer
- - - - - -函数初始化偏置
“零”
(默认)|“narrow-normal”
|“的”
|函数处理
函数初始化偏移量,指定为以下之一:
“零”
-初始偏差为零。“的”
-初始偏差为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
数组中。
数据类型:单
|双
学习率和正规化
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
- - - - - -输出的名字
{“出”}
(默认)
此属性是只读的。
输出层的名称。这个层只有一个输出。
数据类型:细胞
例子
创建3d卷积层
创建一个具有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]显示所有属性
在这里,权重
而且偏见
属性包含指定的值。在训练时,如果这些属性非空,那么软件使用指定的值作为初始权值和偏差。在这种情况下,软件不使用初始化器函数。
创建卷积层,完全覆盖3-D输入
假设输入的大小是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:[]显示所有属性
算法
三维卷积层
卷积层对输入应用滑动卷积滤波器。三维卷积层将二维卷积层的功能扩展到三维深度。该层通过沿着输入垂直、水平和深度移动滤波器来卷积输入,计算权值和输入的点积,然后添加一个偏差项。要了解更多,请参见定义卷积的层在convolution2dLayer
参考页面。
层卷积的维度取决于层输入:
对于三维图像输入(五个维度的数据对应于三个空间维度的像素、通道和观测),该层在空间维度上进行卷积。
对于三维图像序列输入(六维数据,对应于三个空间维度的像素、通道、观测和时间步长),该层在空间维度上进行卷积。
对于二维图像序列输入(五维数据,对应于两个空间维度的像素、通道、观测值和时间步长),该层在空间和时间维度上进行卷积。
图层输入和输出格式
层数组或层图中的层将数据以格式化的方式传递给后续层dlarray
对象。的格式dlarray
对象是一个字符字符串,其中每个字符描述数据的相应维度。格式由以下一个或多个字符组成:
“S”
——空间“C”
——频道“B”
——批“T”
——时间“U”
——未指明的
例如,用4-D数组表示的二维图像数据,其中前两个维度对应图像的空间维度,第三个维度对应图像的通道,第四个维度对应批处理维度,可以描述为具有格式“SSCB”
(空间,空间,渠道,批处理)。
你可以与它们交互dlarray
对象在自动区分工作流程中,如开发自定义层,使用functionLayer
对象,或者使用向前
而且预测
功能与dlnetwork
对象。
的支持的输入格式Convolution3DLayer
对象和相应的输出格式。如果将层的输出传递给不继承自的自定义层nnet.layer.Formattable
类,或FunctionLayer
对象的Formattable
选项设置为假
,则该层接收到一个未格式化的dlarray
对象,其维度顺序与该表中概述的格式相对应。
输入格式 | 输出格式 |
---|---|
|
|
|
|
|
|
参考文献
格洛罗,泽维尔和约舒亚·本吉奥。《理解训练深度前馈神经网络的困难》在第十三届人工智能与统计学国际会议论文集, 249 - 356。撒丁岛,意大利:AISTATS, 2010。
何凯明,张翔宇,任少卿,孙健。深入研究整流器:在ImageNet分类上超越人类水平的性能。在2015年IEEE计算机视觉国际会议论文集, 1026 - 1034。华盛顿:IEEE计算机视觉学会,2015。
版本历史
介绍了R2019a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。