0
点赞
收藏
分享

微信扫一扫

深度学习 | MATLAB Deep Learning Toolbox convolution2dLayer 参数设定


深度学习 | MATLAB Deep Learning Toolbox convolution2dLayer

目录

  • ​​深度学习 | MATLAB Deep Learning Toolbox convolution2dLayer​​
  • ​​convolution2dLayer​​
  • ​​属性设定​​
  • ​​卷积参数​​
  • ​​参数及初始化​​
  • ​​学习率和正则化​​
  • ​​网络层设置​​
  • ​​实例分析​​
  • ​​拓展知识​​
  • ​​参考资料​​
  • ​​致谢​​

MATLAB Deep Learning Toolbox是深度学习工具箱,可以构建深度神经网络模型。实验表明MATLAB2020是目前该工具箱较为完善版本。本文主要构建深度神经网络的convolution2dLayer参数设置。

convolution2dLayer

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

%创建一个二维卷积层并设置 FilterSize 和 NumFilters 属性。
layer = convolution2dLayer(filterSize,numFilters)
%使用名称-值对设置可选的 Stride、DilationFactor、NumChannels、参数和初始化、学习速率和正则化以及名称属性。
layer = convolution2dLayer(filterSize,numFilters,Name,Value)
% 要指定输入填充,使用 'Padding' 名称-值对组参数。 convolution2dLayer(11,96,'Stride',4,'Padding',1) 创建一个二维卷积层,其中包含 96 个大小为 [11 11] 的过滤器,步幅为 [4 4],填充大小为 1 沿层输入的所有边缘。

  • 输入参数

使用逗号分隔的名称-值对参数来指定要沿层输入边缘添加的填充大小,或设置Stride, DilationFactor, NumChannels, Parameters and Initialization, Learn Rate and Regularization等属性。

convolution2dLayer(3,16,'Padding','same') 
creates a 2-D convolutional layer with 16 filters of size [3 3] and 'same' padding.
%在训练时,软件会计算并设置填充的大小,以便层输出与输入具有相同的大小。

  • ‘Padding’ - 输入边缘填充

1.输入边缘填充,指定为逗号分隔的对组,包含 'Padding' 和以下值之一:
- 'same' -
添加由软件在训练或预测时计算的大小的填充,
以便当步长等于 1 时输出与输入的大小相同。
如果步长大于 1,则输出大小为 ceil(inputSize /stride),
其中 inputSize 是输入的高度或宽度,stride 是相应维度的步幅。
如果可能,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。
如果必须垂直添加的填充具有奇数值,则软件会在底部添加额外的填充。
如果必须水平添加的填充具有奇数值,则软件会在右侧添加额外的填充。
2.非负整数p -
向输入的所有边添加大小为非负整数p的填充。
非负整数的向量 [a b] —
在输入的顶部和底部添加大小为 a 的填充,在左侧和右侧添加大小为 b 的填充。
3.非负整数的向量 [t b l r] -
将大小为 t 的填充添加到顶部,b 到底部,l 到左侧,r 到输入的右侧。

属性设定

卷积参数

  • FilterSize - 过滤器的高度和宽度

过滤器的高度和宽度,
指定为两个正整数的向量 [h w],
其中 h 是高度,w 是宽度。
FilterSize 定义输入中神经元连接到的局部区域的大小。
创建图层时,您可以将 FilterSize 指定为标量,以使用相同的高度和宽度值。
示例:[5 5] 指定高度为 5,宽度为 5 的过滤器。

  • NumFilters - 过滤器的数量

过滤器的数量,指定为正整数。 
这个数字对应于卷积层中连接到输入中相同区域的神经元数量。
该参数决定了卷积层输出中的通道数(特征图)。
示例:96

  • Stride - 遍历输入的步长

垂直和水平遍历输入的步长,
指定为两个正整数的向量 [a b],
其中 a 是垂直步长,b 是水平步长。
创建图层时,您可以将 Stride 指定为标量,以对两个步长使用相同的值。
示例:[2 3] 指定垂直步长为 2,水平步长为 3。

  • DilationFactor - 膨胀卷积的因子

扩张卷积(也称为空洞卷积)的因子,
指定为两个正整数的向量 [h w],
其中 h 是垂直扩张,w 是水平扩张。
创建图层时,您可以将 DilationFactor 指定为标量,以便为水平和垂直膨胀使用相同的值。
使用扩张卷积来增加层的感受野(层可以看到的输入区域)而不增加参数或计算的数量。
该层通过在每个过滤器元素之间插入零来扩展过滤器。
膨胀因子决定了对输入进行采样的步长或等效的滤波器的上采样因子。
它对应于 (Filter Size – 1) .* Dilation Factor + 1 的有效过滤器尺寸。例如,具有扩张因子 [2 2] 的 3×3 滤波器等效于元素之间具有零的 5×5 滤波器。
示例:[2 3]

  • PaddingSize - 填充的大小

应用于输入边框的填充大小,指定为四个非负整数的向量 [tblr],其中
t 是应用于顶部的填充,
b 是应用于底部的填充,
l 是应用于左侧的填充,以及
r 是应用于右侧的填充。
创建图层时,请使用 'Padding' 名称-值对组参数指定填充大小。
示例: [1 1 2 2] 在顶部和底部添加一行填充,在输入的左侧和右侧添加两列填充。

  • PaddingMode - 确定填充大小的方法

确定填充大小的方法,指定为 'manual' 或 'same'。
软件会根据您在创建图层时指定的“Padding”值自动设置 PaddingMode 的值。
如果您将“Padding”选项设置为标量或非负整数向量,则软件会自动将 PaddingMode 设置为“manual”。
如果您将 'Padding' 选项设置为 'same',那么软件会自动将 PaddingMode 设置为 'same' 并在训练时计算填充的大小,以便在步幅等于 1 时输出与输入的大小相同。如果步幅大于 1,则输出大小为 ceil(inputSize/stride),其中 inputSize 是输入的高度或宽度,stride 是相应维度的步幅。如果可能,软件会在顶部和底部以及左侧和右侧添加相同数量的填充。如果必须垂直添加的填充具有奇数值,则软件会在底部添加额外的填充。如果必须水平添加的填充具有奇数值,则软件会在右侧添加额外的填充。

  • Padding - 填充的大小

垂直和水平应用于输入边框的填充大小,
指定为两个非负整数的向量 [ab],
其中 a 是应用于输入数据顶部和底部的填充,b 是应用于左侧和右侧的填充 .
示例: [1 1] 在输入的顶部和底部添加一行填充,在输入的左侧和右侧添加一列填充。

  • PaddingValue - 填充数据的值
  • NumChannels - 每个过滤器的通道数

每个过滤器的通道数,指定为 'auto' 或正整数。
这个参数总是等于输入到卷积层的通道数。
例如,如果输入是彩色图像,则输入的通道数为3。如果当前层之前的卷积层的滤波器数为16,则当前层的通道数为16
如果 NumChannels 为“自动”,则软件确定训练时的通道数。
示例:256

参数及初始化

  • WeightsInitializer - 初始化权重的函数

用于初始化权重的函数,指定为以下值之一:
'glorot' – 使用 Glorot 初始值设定项 [4](也称为 Xavier 初始值设定项)初始化权重。 Glorot 初始值设定项从均值和方差为零的均匀分布中独立采样 2/(numIn + numOut),其中 numIn = FilterSize(1)*FilterSize(2)*NumChannels 和 numOut = FilterSize(1)*FilterSize(2)*NumFilters .
'he' – 使用 He 初始化器 [5] 初始化权重。 He 初始值设定项从均值为零且方差为 2/numIn 的正态分布中采样,其中 numIn = FilterSize(1)*FilterSize(2)*NumChannels。
'narrow-normal' – 通过从均值为零且标准差为 0.01 的正态分布中独立采样来初始化权重。
'zeros' - 用零初始化权重。
'ones' - 用 1 初始化权重。
函数句柄 – 使用自定义函数初始化权重。如果指定函数句柄,则该函数必须采用 weights = func(sz) 形式,其中 sz 是权重的大小。有关示例,请参阅指定自定义权重初始化函数。
该层仅在 Weights 属性为空时初始化权重。

  • BiasInitializer - 初始化偏差的函数

用于初始化偏差的函数,指定为下列值之一:
'zeros' - 用零初始化偏置。
'ones' - 用一个初始化偏差。
'narrow-normal' – 通过从均值为零且标准差为 0.01 的正态分布中独立采样来初始化偏差。
函数句柄 - 使用自定义函数初始化偏差。 如果指定函数句柄,则该函数必须采用bias = func(sz) 形式,其中sz 是偏差的大小。
该层仅在 Bias 属性为空时初始化偏差。

  • Weights - 层权重

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

层权重是可学习的参数。 您可以使用图层的权重属性直接指定权重的初始值。 训练网络时,如果层的 Weights 属性为非空,
则 trainNetwork 使用 Weights 属性作为初始值。
如果 Weights 属性为空,
则 trainNetwork 使用由该层的 WeightsInitializer 属性指定的初始值设定项。
在训练时,权重是一个 FilterSize(1)-by-FilterSize(2)-by-NumChannels-by-NumFilters 数组。

  • Bias - 层偏差

卷积层的层偏差,指定为数值数组。
层偏差是可学习的参数。
训练网络时,如果 Bias 非空,
则 trainNetwork 使用 Bias 属性作为初始值。
如果 Bias 为空,
则 trainNetwork 使用 BiasInitializer 指定的初始化程序。
在训练时,Bias 是一个 1×1×NumFilters 数组。

学习率和正则化

  • WeightLearnRateFactor — 权重的学习率因子
  • BiasLearnRateFactor - 偏差的学习率因子
  • WeightL2Factor — 权重的 L2 正则化因子
  • BiasL2Factor — 偏差的 L2 正则化因子

网络层设置

  • Name — Layer 名
  • NumInputs — 输入量
  • InputNames — 输入名
  • NumOutputs — 输出量
  • OutputNames — 输出名

实例分析

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

layer = convolution2dLayer(11,96,'Stride',4)
layer =
Convolution2DLayer with properties:

Name: ''

Hyperparameters
FilterSize: [11 11]
NumChannels: 'auto'
NumFilters: 96
Stride: [4 4]
DilationFactor: [1 1]
PaddingMode: 'manual'
PaddingSize: [0 0 0 0]
PaddingValue: 0

Learnable Parameters
Weights: []
Bias: []

Show all properties

%在层数组中包含一个卷积层。
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer]

要指定权重和偏差初始值设定项函数,请分别使用 WeightsInitializer 和 BiasInitializer 属性。

%创建一个具有 32 个过滤器的卷积层,
%每个过滤器的高度和宽度为 5,并将权重初始化器指定为 He 初始化器。
filterSize = 5;
numFilters = 32;
layer = convolution2dLayer(filterSize,numFilters, ...
'WeightsInitializer','he')

权重和偏差属性为空。 在训练时,软件使用指定的初始化函数初始化这些属性。

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

layer = convolution2dLayer(filterSize,numFilters, ...
'WeightsInitializer', @(sz) rand(sz) * 0.0001, ...
'BiasInitializer', @(sz) rand(sz) * 0.0001)
%同样,Weights 和 Bias 属性为空。
%在训练时,软件使用指定的初始化函数初始化这些属性。直接指定权重和偏差
%创建一个输出大小为 10 的全连接层,并将权重和偏差分别设置为 MAT 文件 Conv2dWeights.mat 中的 W 和 b。

filterSize = 5;
numFilters = 32;
load Conv2dWeights
layer = convolution2dLayer(filterSize,numFilters, ...
'Weights',W, ...
'Bias',b)

创建完全覆盖输入的卷积层
假设输入的大小为 28×28×1。 创建一个带有 16 个过滤器的卷积层,每个过滤器的高度为 6,宽度为 4。将水平和垂直步幅设置为 4。
确保卷积完全覆盖输入。 为了让卷积完全覆盖输入,水平和垂直输出维度都必须是整数。 水平输出维度为整数,需要在图像的顶部和底部各加一行padding:(28 – 6+ 2 * 1)/4 + 1 = 7。垂直输出维度为整数 ,不需要零填充:(28 – 4+ 2 * 0)/4 + 1 = 7。

layer = convolution2dLayer([6 4],16,'Stride',4,'Padding',[1 0])

拓展知识

二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平移动过滤器,计算权重和输入的点积,然后添加偏置项来对输入进行卷积。卷积层由各种组件组成。

  • 过滤器和步幅
    卷积层由连接到输入图像子区域或前一层输出的神经元组成。该层在扫描图像时学习这些区域定位的特征。使用卷积 2dLayer 函数创建图层时,您可以使用 filterSize 输入参数指定这些区域的大小。
    对于每个区域,trainNetwork 函数计算权重和输入的点积,然后添加偏置项。应用于图像中某个区域的一组权重称为过滤器。过滤器沿输入图像垂直和水平移动,对每个区域重复相同的计算。换句话说,过滤器对输入进行卷积。此图显示了通过输入进行的 3×3 过滤器扫描。下图代表输入,上图代表输出。

    滤波器移动的步长称为步幅。 您可以使用 Stride 名称-值对组参数指定步长。 神经元连接到的局部区域可以根据 filterSize 和 ‘Stride’ 值重叠。此图显示了一个 3×3 过滤器扫描输入,步长为 2。下图表示输入,上图表示输出。

过滤器中的权重数为 h * w * c,其中 h 是高度,w 是过滤器的宽度,c 是输入中的通道数。 例如,如果输入是彩色图像,则颜色通道数为 3。过滤器的数量决定了卷积层输出中的通道数。 使用 numFilters 参数和卷积 2dLayer 函数指定过滤器的数量。

  • 膨胀卷积
    扩张卷积是一种卷积,其中过滤器通过插入过滤器元素之间的空间进行扩展。 使用 ‘DilationFactor’ 属性指定膨胀因子。使用扩张卷积来增加层的感受野(层可以看到的输入区域)而不增加参数或计算的数量。
    该层通过在每个过滤器元素之间插入零来扩展过滤器。 膨胀因子决定了对输入进行采样的步长或等效的滤波器的上采样因子。 它对应于 (Filter Size – 1) .* Dilation Factor + 1 的有效过滤器尺寸。例如,具有膨胀系数 [2 2] 的 3×3 过滤器等效于具有以下功能的 5×5 过滤器 元素之间的零。此图显示了一个 3×3 滤波器,放大了两倍,扫描输入。 下图代表输入,上图代表输出。
  • 特征图
    当过滤器沿着输入移动时,它使用相同的权重集和相同的卷积偏置,形成一个特征图。 每个特征图都是使用不同权重集和不同偏差的卷积的结果。 因此,特征图的数量等于过滤器的数量。 卷积层中的参数总数为 ((hwc + 1)*Number of Filters),其中 1 是偏差。
  • 填充
    使用 ‘Padding’ 名称-值对组参数在垂直和水平方向上对输入图像边框应用填充。 填充是附加到输入边界以增加其大小的值。 通过调整padding,可以控制图层的输出大小。此图显示了一个 3×3 过滤器扫描输入,填充大小为 1。下图表示输入,上图表示输出。
  • 输出尺寸
    一个卷积层的输出高度和宽度为(Input Size – ((Filter Size – 1)Dilation Factor + 1) + 2Padding)/Stride + 1。这个值必须是整数才能使整个图像完整 覆盖。 如果这些选项的组合没有导致图像被完全覆盖,则软件默认会忽略卷积中沿右边缘和下边缘的图像剩余部分。
  • 神经元数
    输出高度和宽度的乘积给出了特征图中的神经元总数,比如 Map Size。 一个卷积层中的神经元总数(输出大小)为 Map Size*Number of Filters。例如,假设输入图像是 32×32×3 的彩色图像。 对于一个有 8 个过滤器且过滤器大小为 5×5 的卷积层,每个过滤器的权重数为 5 * 5 * 3 = 75,该层中的参数总数为 (75 + 1) * 8 = 608。如果每个方向的步幅为 2,并指定大小为 2 的填充,则每个特征图为 16×16。 这是因为 (32 – 5 + 2 * 2)/2 + 1 = 16.5,并且图像右侧和底部的一些最外边填充被丢弃。 最后,该层的神经元总数为 16 * 16 * 8 = 2048。通常,这些神经元的结果会通过某种形式的非线性,例如整流线性单元 (ReLU)。

举报

相关推荐

0 条评论