当前位置:   article > 正文

Lecture5:卷积层、池化层、全连接层_卷积层,池化层,全连接层

卷积层,池化层,全连接层

目录

1.卷积层、池化层、全连接层

1.1 全连接层

1.2 卷积层 

1.3 池化层


1.卷积层、池化层、全连接层

1.1 全连接层

        对全连接层而言,我们要做的就是在这些向量上进行操作,比如我们有一张RGB-D图片,它的大小为32*32*3,我们将所有像素展开,就可以得到一个3072维的向量。我们将这个向量和训练出的权重矩阵W10\times 3072相乘,然后就可以得到10个值,通过激活,我们得到了这一层的输出值。

1.2 卷积层 

        卷积层与全连接层的主要差别是它就可以保全空间结构,用一张我们之前用过的32\times 32 \times 3的图片,而不是将它展成一个长向量,我们可以保持图片的结构。我们的权重也换成了一些小的卷积核(感受野),例子中是5\times 5\times 3的大小,我们将这个卷积核在图像上移动计算出每一个空间定位时的点积结果。

        注意:这里的卷积核w是一个5\times 5\times 3的向量去和图像中的5\times 5\times 3区域进行点乘,然后加上一个偏置项。

        那么我们如何滑动卷积核并遍历所有空间位置呢?
        将这个卷积核从图片左上方的边角处开始并且让卷积核遍历输入的所有像素点,在每一个位置,我们都进行点积运算,每一次运算都会在我们输出激活映射中产生一个值。之后我们再继续滑动卷积核,最简单的方式是一个像素一个像素地滑动,我们持续地进行这样操作并相应的填满我们的输出激活映射,如下图:

        如果利用一个卷积核,输入的是一个32\times32\times3的图像,3表示通道,我们用一个    5\times 5\times 3的卷积核对图像进行卷积,最终得到了一个28 \times 28 \times 1的图像,我们先忽略这是怎么得到的。

        那么如果当我们在处理一个卷积层时我们希望用到多种卷积核,因为每一个卷积核可以从输入中提取不一样的特征(得到一种特殊的模式或概念),所以我们会有一组卷积核,这里还选择5\times 5\times 3的卷积核,如下图,这时我们最终得到了一个28 \times 28 \times 2的图像:

         因此,卷积核可以起到提取特征的作用,同时,有多少卷积核输出的图像就有多少通道:

         到此,我们总结一下在卷积神经网络中我们是如何使用这些卷积层的:GonvNet基本上是由多个卷积层组成的一个序列,它们依次堆叠就像我们之前在神经网络中那样堆叠简单的线性层一样,之后我们将用激活函数对其进行逐一处理,比方说一个ReLU激活函数,如下图:

         现在让我们看看32\times32\times3是怎样通过一个5\times 5\times 3的卷积核得到一个28 \times 28 \times 1的输出:

        为了方便理解,我们假设是7 \times 7的输入,我们有一个3\times3的卷积核,最终得到了5\times5的输出。这是因为滑动卷积核,只能水平或垂直移动五次。

        我们之前都是假定步长为1,那么步长为2会是怎样呢?只能滑动三次,因此最终得到了一个3\times3的输出。

         那如果步长为3呢?我们发现它只滑动了1次,且右面有没有拟合过的点,也就是说当采用步长3的时候和既有图像不能很好地拟合,说明这是行不通的。我们不会这样去做卷积,因为它会导致不对称的输出。

        那让我们总结一下输出尺寸如何确定吧:

\frac{(N-F)}{stride}+1

        其中,N是图片大小,F是卷积核大小,stride是步长。向下取整。 

        同时为了处理步长为3的卷积核不可行的问题,我们提出了零填充,即用0来填充像素矩阵,如下:

        那么现在输出大小会变成3\times3!当然,零填充只是一种方式,我们可以采用边缘扩充或者扩散的方法来填充边缘值。

        为什么要填充呢?因为我们通过卷积得到的像素图片的大小越来越小,这不是我们想要的,设想你有一个不错的深度网络,你的激活映射迅速缩得非常小这样是不好的。因为这会损失一些信息,你只能用很少的值来表示你的原始图像。同时当图片变得更小关于图像边角的信息也会丢掉更多。

        让我们手动计算下面一个例子:

         这里给出改进后的加入填充的公式:

output= \left \lfloor \frac{(N-F+2\times padding)}{stride}+1 \right \rfloor

         因此对于一层来说输出的大小为32\times32,但是我们用了10个卷积核,因此输出图像的通道大小为10,最后我们通过这层卷积输出的图片大小为32\times32\times10

        那么这一卷积层的参数是多少呢?

(col * vol+bias)*kernel = (5\times 5\times 3 + 1)\times 10 =760

         同样,我们可以做1\times1卷积改变深度,并且还能在后面加入激活函数:

1.3 池化层

        池化层所做的就是让所生成的表示更小自更容易控制(下采样)。且我们不会做深度方面的池化处理,因此输入的深度和输出的深度是一样的。
        最常见的方法是最大池化法,在这个例子当中池化层也有一个卷积核的大小,并且池化层的大小和我们所要池化处理的区域大小是相同的,在这个例子中,如果我们使用2\times2的滤波器并且我们设置步长为2,我们让这个卷积核滑过整个输入部分,不过我们不进行卷积操作,而是在所在图像区域提取输入的最大值,如下:

        需要补充的是,①关于步长的选择,池化层通常让卷积核没有任何重叠,只用一个数值表示一块区域;②为什么选择最大池化而不选择平均池化或者其他的池化方法:用的最多...

 ③池化层能进行填充吗?一般不在池化层填0,因为池化层只做降采样这样就不会导致卷积核扫过边缘时有一部分超出了输入的范围,这样池化时就不需要担心这样的问题。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/75146
推荐阅读
相关标签
  

闽ICP备14008679号