创建和训练一个新的卷积神经网络(ConvNet)的第一步是定义网络架构。本主题解释ConvNet层的详细信息,以及它们在ConvNet中出现的顺序。有关深度学习层的完整列表以及如何创建它们,请参见<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ug/list-of-deep-learning-layers.html" class="a">深度学习层列表一个>.要了解用于序列分类和回归的LSTM网络,请参见<一个href="//www.tatmou.com/uk/help/deeplearning/ug/long-short-term-memory-networks.html" class="a">长短期记忆网络一个>.若要了解如何创建自己的自定义层,请参见<一个href="//www.tatmou.com/uk/help/deeplearning/ug/define-custom-deep-learning-layers.html" class="a">定义自定义深度学习层一个>.
网络体系结构可以根据所包含的层的类型和数量而变化。所包含的层的类型和数量取决于特定的应用程序或数据。例如,如果你有分类响应,你必须有一个软最大层和一个分类层,而如果你的响应是连续的,你必须在网络的末端有一个回归层。只有一到两个卷积层的较小网络可能足以在少量灰度图像数据上学习。另一方面,对于拥有数百万彩色图像的更复杂的数据,您可能需要一个具有多个卷积和完全连接层的更复杂的网络。
要指定所有层按顺序连接的深层网络的体系结构,请直接创建层数组。例如,要创建一个将28 × 28灰度图像分为10类的深度网络,请指定层数组
layers = [imageInputLayer([28 28 1]) convolution2dLayer(3,16,'Padding',1) batchNormalizationLayer reluLayer maxPooling2dLayer(2,'Stride',2) convolution2dLayer(3,32,'Padding',1) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];
层
的数组。为了指定所有层按顺序连接的神经网络的体系结构,直接创建一个层数组。要指定层可以有多个输入或输出的网络体系结构,请使用<一个href="//www.tatmou.com/uk/help/deeplearning/ref/nnet.cnn.layergraph.html">LayerGraph
对象。
创建一个图像输入层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.imageinputlayer.html">imageInputLayer
.
图像输入层将图像输入到网络并应用数据规范化。年代p一个n>
属性指定图像大小
二维卷积层对输入应用滑动卷积滤波器。年代p一个n>创建一个2-D卷积层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.convolution2dlayer.html">convolution2dLayer
.
卷积层由各种组件组成。<年代up class="footnote">[年代p一个n>1一个>]年代p一个n>
卷积层由连接到输入图像的子区域或前一层输出的神经元组成。该层在扫描图像时学习由这些区域定位的特征。创建一个层时使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.convolution2dlayer.html">convolution2dLayer
函数指定这些区域的大小
对于每个区域,
这张图片显示了一个3乘3的过滤器扫描输入。下面的映射表示输入,上面的映射表示输出。
过滤器移动的步长称为a<年代p一个ncl一个年代年代="emphasis">步.属性指定步长
这张图片显示了一个3 × 3的过滤器以2的步幅扫描输入。下面的映射表示输入,上面的映射表示输出。
一个过滤器中权重的数量是h*w*c,在那里h是高度,和w是滤波器的宽度,分别和c输入中的通道数。例如,如果输入是彩色图像,则彩色通道的数量为3。过滤器的数量决定了卷积层输出中的通道数量。属性指定筛选器的数目
扩张卷积是一种通过在滤波器的元素之间插入空间来扩展滤波器的卷积。属性指定膨胀因子
使用扩张卷积来增加层的接受域(层可以看到的输入区域),而不增加参数数量或计算量。
该层通过在每个过滤器元素之间插入0来扩展过滤器。膨胀因子决定对输入进行采样的步长或等效地决定滤波器的上采样因子。它对应于有效过滤器大小为(过滤器的大小- 1) .*膨胀系数+ 1。例如,带有膨胀因子的3 × 3滤波器
这张图片显示了一个放大了两倍的3 × 3滤波器对输入进行扫描。下面的映射表示输入,上面的映射表示输出。
当滤波器沿着输入移动时,它对卷积使用相同的权重集和相同的偏置,形成一个<年代p一个ncl一个年代年代="emphasis">特征映射.每个特征映射都是使用不同的权重集和不同的偏置进行卷积的结果。因此,特征映射的数量等于过滤器的数量。卷积层的参数总数为((h*w*c+ 1) *过滤器数量),其中1为偏差。
方法也可以在垂直和水平方向上对输入图像边框应用填充
这张图片显示了一个3乘3的过滤器扫描输入,填充大小为1。下面的映射表示输入,上面的映射表示输出。
卷积层的输出高度和宽度为(输入的大小- ((过滤器的大小- 1) *膨胀系数+ 1) + 2*填充)/步+ 1。这个值必须是整数,才能完全覆盖整个图像。如果这些选项的组合没有导致图像被完全覆盖,软件默认情况下会忽略卷积中沿着右侧和底部边缘的图像的其余部分。
例如,输出高度和宽度的乘积给出了特征图中神经元的总数地图大小.卷积层中神经元的总数(输出大小)为地图大小*过滤器数量.
例如,假设输入图像是一个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)。
在定义卷积层时,可以使用名称-值对参数调整该层的学习率和正则化选项。如果您选择不指定这些选项,那么
卷积神经网络可以由一个或多个卷积层组成。卷积层的数量取决于数据的数量和复杂性。
使用。创建批处理规范化层<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.batchnormalizationlayer.html">batchNormalizationLayer
.
批处理归一层对每个通道的所有观测数据分别进行小批处理。为了加快卷积神经网络的训练并降低对网络初始化的敏感性,在卷积层和非线性层之间使用批量归一化层,如ReLU层。年代p一个n>
该层首先通过减去迷你批平均值并除以迷你批标准差来规范化每个通道的激活。然后,该层将输入按可学习偏移量移动β然后用一个可学习的比例因子来衡量γ.β而且γ它们本身是可学习的参数,在网络训练期间更新。
批处理归一化层将通过神经网络传播的激活和梯度归一化,使网络训练成为一个更容易的优化问题。为了充分利用这一事实,您可以尝试提高学习率。由于优化问题更容易,参数更新可以更大,网络可以更快地学习。你也可以试着减少L<年代ub>2年代ub>以及dropout正则化。使用批处理归一化层,训练期间特定图像的激活取决于哪些图像恰好出现在同一个小批处理中。为了充分利用这种正则化效应,可以尝试在每个训练阶段之前对训练数据进行洗牌。若要指定在训练期间打乱数据的频率,请使用
创建一个ReLU层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.relulayer.html">reluLayer
.
ReLU层对输入的每个元素执行阈值操作,其中任何小于零的值都被设置为零。年代p一个n>
卷积和批处理归一化层之后通常是一个非线性激活函数,例如由ReLU层指定的校正线性单元(ReLU)。ReLU层对每个元素执行阈值操作,其中任何小于零的输入值都被设置为零,即:
ReLU层不改变其输入的大小。
还有其他非线性激活层执行不同的操作,可以提高某些应用的网络精度。有关激活层的列表,请参见<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ug/list-of-deep-learning-layers.html" class="a">激活层一个>.
使用。创建跨通道规范化层<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.crosschannelnormalizationlayer.html">crossChannelNormalizationLayer
.
信道局部响应(跨信道)归一层执行信道归一化。年代p一个n>
该层执行按通道的本地响应规范化。它通常遵循ReLU激活层。该层使用从一定数量的相邻通道(归一化窗口中的元素)获得的元素替换每个元素的归一化值。也就是说,对于每个元素<年代p一个ncl一个年代年代="inlineequation">
在输入中,
在哪里K,α,β超参数归一化了吗党卫军是归一化窗口中元素的平方和吗<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ug/layers-of-a-convolutional-neural-network.html" class="intrnllnk">[2]一个>.属性指定规范化窗口的大小
前面的归一化公式与中给出的略有不同<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ug/layers-of-a-convolutional-neural-network.html" class="intrnllnk">[2]一个>.乘以,就可以得到等效的公式
最大池化层通过将输入划分为矩形池化区域,并计算每个区域的最大值来进行下采样。年代p一个n>创建一个最大池化层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.maxpooling2dlayer.html">maxPooling2dLayer
.
平均池化层通过将输入划分为矩形池化区域并计算每个区域的平均值来进行下采样。年代p一个n>创建一个平均池层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.averagepooling2dlayer.html">averagePooling2dLayer
.
池化层跟随卷积层进行向下采样,因此减少了到以下层的连接数量。它们本身不进行任何学习,但减少了在以下层中要学习的参数的数量。它们还有助于减少过拟合。
最大池化层返回输入矩形区域的最大值。矩形区域的大小由
属性指定的步长范围内,池化层水平和垂直扫描输入
对于非重叠区域(池大小而且步= =),如果池化层的输入是n——- - - - - -n,池化区域大小为h——- - - - - -h,然后池化层对区域进行下采样h[6]一个>.即卷积层的一个通道的最大或平均池化层的输出为n/h——- - - - - -n/h.对于重叠区域,池化层的输出为(输入的大小- - - - - -池大小+ 2 *填充)/步+ 1。
创建一个退出层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.dropoutlayer.html">dropoutLayer
.
dropout层以给定的概率随机地将输入元素设置为零。年代p一个n>
在训练时,该层随机将输入元素设置为由dropout mask给出的零
与最大池化层或平均池化层类似,在该层中不进行学习。
创建一个全连接层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.fullyconnectedlayer.html">fullyConnectedLayer
.
全连接层将输入乘以权重矩阵,然后添加偏置向量。年代p一个n>
卷积(和向下采样)层后面是一个或多个完全连接层。
顾名思义,完全连接层中的所有神经元都连接到前一层中的所有神经元。这一层结合了前一层在图像中学习到的所有特征(局部信息),以识别更大的模式。对于分类问题,最后一个全连接层结合特征对图像进行分类。这就是为什么
在创建全连接层时,您还可以使用相关的名称-值对参数来调整该层的学习率和正则化参数。如果你选择不调整它们,那么
全连接层将输入乘以权重矩阵W然后加上一个偏置向量b.
如果该层的输入是一个序列(例如,在LSTM网络中),那么全连接层在每个时间步上都独立地起作用。例如,如果在全连接层之前的层输出一个数组X的大小D——- - - - - -N——- - - - - -年代,则全连接层输出一个数组Z的大小
softmax层对输入应用一个softmax函数。年代p一个n>创建一个softmax层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/nnet.cnn.layer.softmaxlayer.html">softmaxLayer
.
分类层计算具有互斥类的分类和加权分类任务的交叉熵损失。年代p一个n>创建一个分类层使用<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/classificationlayer.html">classificationLayer
.
对于分类问题,一个软最大层和一个分类层必须在最后的全连接层之后。
输出单元激活函数为softmax函数:
在哪里<年代p一个ncl一个年代年代="inlineequation"> 而且<年代p一个ncl一个年代年代="inlineequation"> .
对于多类分类问题,softmax函数是最后一个全连通层之后的输出单元激活函数:
在哪里<年代p一个ncl一个年代年代="inlineequation"> 而且<年代p一个ncl一个年代年代="inlineequation"> .此外,<年代p一个ncl一个年代年代="inlineequation"> ,<年代p一个ncl一个年代年代="inlineequation"> 样本的条件概率是给定类吗r,<年代p一个ncl一个年代年代="inlineequation"> 是类先验概率。
softmax函数也称为<年代p一个ncl一个年代年代="emphasis">归一化指数可以认为是logistic sigmoid函数的多类泛化<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ug/layers-of-a-convolutional-neural-network.html" class="intrnllnk">[8]一个>.
对于典型的分类网络,分类层必须遵循软最大层。在分类层,
在哪里N是样本数,K是类的数量,<年代p一个ncl一个年代年代="inlineequation"> 重量是按等级计算的吗我,<年代p一个ncl一个年代年代="inlineequation"> 该指标是否为n该样品属于我Th类,和<年代p一个ncl一个年代年代="inlineequation"> 输出是样品吗n为类我,在本例中是softmax函数的值。换句话说,<年代p一个ncl一个年代年代="inlineequation"> 网络关联的概率是n带类的Th输入我.
使用创建回归层<一个href="//www.tatmou.com/uk/uk/help/deeplearning/ref/regressionlayer.html">regressionLayer
.
回归层计算回归任务的半均方误差损失。年代p一个n>对于典型的回归问题,回归层必须在最后的全连接层之后。
对于单个观测,均方误差为:
在哪里R是响应的数量,t<年代ub>我年代ub>是目标输出,和y<年代ub>我年代ub>是网络对反应的预测吗我.
对于图像和序列到一的回归网络,回归层的损失函数是预测响应的半均方误差,而不是归一化R:
对于图像到图像的回归网络,回归层的损失函数是每个像素的预测响应的半均方误差,而不是归一化R:
在哪里H,W,C分别表示输出的高度、宽度和通道数,和p的每个元素(像素)的索引t而且y线性。
对于序列到序列的回归网络,回归层的损失函数是每个时间步的预测响应的半均方误差,而不是归一化R:
在哪里年代是序列长度。
训练时,软件计算小批中观测值的平均损失。
[1]墨菲,k.p.。机器学习:一个概率的视角.马萨诸塞州剑桥:麻省理工学院出版社,2012年。
[2]克里日夫斯基,A. I.萨茨科弗,G. E.辛顿。深度卷积神经网络的ImageNet分类神经信息处理系统研究进展.2012年第25卷。
[3] LeCun, Y., Boser, B., Denker, j.s., Henderson, D., Howard, R.E., Hubbard, W., Jackel, L.D.等人“使用反向传播网络的手写数字识别。“在神经信息处理系统研究进展, 1990年。
[4] LeCun, Y., L. Bottou, Y. Bengio, P. Haffner。“基于梯度的学习应用于文档识别。”IEEE论文集。第86卷,第2278-2324页,1998。
[5]奈尔,V.和G. E.欣顿。修正线性单元改进受限玻尔兹曼机第27届国际机器学习会议论文集,2010。
[6] Nagi, J. F. Ducatelle, G. A. Di Caro, D. Ciresan, U. Meier, A. Giusti, F. Nagi, J. Schmidhuber, L. M. Gambardella。“基于视觉手势识别的最大池化卷积神经网络”。IEEE信号与图像处理应用国际会议(ICSIPA2011), 2011年。
[7]斯里瓦斯塔瓦,N., G. Hinton, A. Krizhevsky, I. Sutskever, R. Salakhutdinov。“Dropout:一种防止神经网络过拟合的简单方法”机器学习研究杂志.第15卷,1929-1958页,2014年。
[8]毕晓普c.m.模式识别与机器学习.施普林格,纽约,纽约,2006。
约菲、谢尔盖和克里斯蒂安·塞格迪。“批处理归一化:通过减少内部协变量转移来加速深度网络训练。”<年代p一个ncl一个年代年代="emphasis">预印本,arXiv: 1502.03167(2015)。
averagePooling2dLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">batchNormalizationLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">classificationLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">clippedReluLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">convolution2dLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">crossChannelNormalizationLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">dropoutLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">fullyConnectedLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">imageInputLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">leakyReluLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">maxPooling2dLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">regressionLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">reluLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">softmaxLayer
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">trainingOptions
|<年代p一个n我temscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">trainNetwork
[年代p一个n>1一个>]年代p一个n>图片来源:<一个href="https://github.com/vdumoulin/conv_arithmetic" target="_blank">卷积运算一个>(<一个href="https://github.com/vdumoulin/conv_arithmetic/blob/master/LICENSE" target="_blank">许可证一个>)