美文网首页
CNN学习笔记-2

CNN学习笔记-2

作者: Canala | 来源:发表于2019-10-06 01:49 被阅读0次

二 卷积过程

1 卷积过程中一些概念

(1) 过程说明

卷积过程实际就是基于一个固定的矩阵(输入像素矩阵),在另一个矩阵(卷积核)不断一格一格(步长为1)扫过去,得到的数值的和,产生一个新的矩阵。用一个式子表示:Wx+b ⇒ ReLU ⇒ maxpooling。

(2) 卷积后的维数:

输入大小为:W1×H1×D1

需要指定的超参数:filter个数(K),filter大小(F),步长(s),边界填充(P)

输出: W2 = (W1-F + 2P)/S + 1

      H2 = (H1 - F + 2P)/S + 1

深度 D2 = K

在上面两个公式中,W2是卷积后Feature Map的宽度;W1是卷积前图像的宽度;F是filter的宽度;P是Zero Padding数量,Zero Padding是指在原始图像周围补几圈0,如果P的值是1,那么就补1圈0;S是步长;H2是卷积后Feature Map的高度;H1是卷积前图像的高度。

(3) 池化: 把原来的维数降到1/n,n是池化矩阵的维数

(4) 步长(stride):卷积核每次移动的格子

(5) Padding :填充

输入图像在被卷积后,输出的图像会“缩小”,经过有限的卷积操作后,输入会变得过小,而不适合再进行卷积,从而限制整个网络的深度。Padding 可以解决此类问题。它会在输入图像进行卷积前先在频道周围“填充”上若干圈0。

当Padding设置为1时,即在输入图像周围填充一圈0。

(6) 激活函数

激活函数的种类也有很多,常用的是ReLU :f(x) = max{0,x}

2 卷积过程

(1) 单通道卷积

单个输入通道的卷积操作是非常简单的,输入图像像素和卷积核的对应元素相乘再相加即可。如下图的过程:

(2) 多通道卷积

实际情况中大多为多通道卷积。多通道卷积的过程如下图。下图是一个7*7*3的像素矩阵,俩个大小为3*3*3的卷积核(最后的3要对应输入像素矩阵的位深)。先看第一个卷积核W0,输入像素矩阵的每一层与W0对应的层做卷积,然后代入到激活函数中,得到第一层feature map,然后输入像素矩阵与卷积核W1做卷积,生成第二层feature map,其中输入像素与卷积核每对相同位置的元素乘积的和代入激活函数,就生成了 feature map 中的一个像素。不管输入图像有多少层,经过一个filter,最后都通过下面的公式变成一个深度为1的特征图。因此,卷积后feature Map的深度(层数)和卷积层的filter个数是相同的。要提取多少特征就需要多少个卷积核,越往后,卷积核设定的数目越多,体现label的特征就越细致,提取的特征就越多,就越能完成分类,识别等功能。

下面的式子就是生成feature map中每个元素的公式

首先对图像的每个像素进行编号,用Xi,j表示图像的第i行第j列元素;对filter的每个权重进行编号,用Wm,n表示第m行第n列权重,用Wb表示filter的偏置项;对Feature Map的每个元素进行编号,用ad,i,j表示Feature Map的第d层第i行第j列元素;用f表示激活函数(这个例子选择relu函数作为激活函数),D是深度(层数);F是filter的大小(宽度或高度,两者相同)。

不同的filter可以卷积得到不同的特征,也就是得到不同的feature map。有多少个卷积核就生成多少张特征图。

这里以典型的CNN模型AlexNet为例。AlexNet输入为227*227*3(最后的3 就是通道数),卷积核尺寸为11*11*3(最后的3是原图的深度3),卷积核的深度要和上一层输出的图像的深度一样。

第一层:

AlexNet训练时用俩个GPU并行训练,故将96个卷积核分成2组,每组48个卷积核,对应生成2组55*55*48的像素层,生成的特征图的大小是55*55,有48层(每组48层)。

这些像素层经过pool运算(池化运算)的处理,池化运算的尺度为3*3,运算的步长为2,则池化后图像的尺寸为(55-3)/2+1=27。,即每组像素层的维数是27*27*48。

第二层:

输入为27*27*96的像素层,padding = 2;27*27*96的像素层分成维数为27*27*48的两组,两组数据分别再两个不同的GPU中进行运算。每个GPU中有128个卷积核,大小是5*5*48,步长为1,生成俩组维数为27*27*128的像素层。经过池化层,池化运算的尺度为3*3,运算的步长为2,池化后像素的规模为2组13*13*128的像素层。

第三层:

输入为2组13*13*128的像素层;padding = 1;2组像素层要送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是3*3*128;步长为1。因此,每组运算后生成的特征图是13*13*192的像素层。

第四层:

输入为2组13*13*192的像素层;padding = 1;2组像素层数据都被送至2个不同的GPU中进行运算。每个GPU中都有192个卷积核,每个卷积核的尺寸是3*3*192;步长为1。因此,生成2组13*13*192像素层,

第五层:

输入是2组13*13*192的像素层;padding = 1;2组像素层都被送至2个不同的GPU中进行运算。每个GPU中都有128个卷积核,每个卷积核的尺寸是3*3*192;步长是1。因此,运算后的每组特征图的是13*13*128的像素层。

2组13*13*128像素层分别在2个不同GPU中进行池化(pool)运算处理。池化运算的尺度为3*3,运算的步长为2,则池化后每组图像的尺寸为6*6*128。

第六层(fc6):

第五层输出的6*6*256的像素层与第六层的4096个神经元全连接,然后经relu6处理生成4096个数据,再经过drop6处理输出4096个数据。

第七层(fc7):

第六层输出的4096个数据与第七层的4096个神经元进行全连接,然后经由relu7进行处理后生成4096个数据,再经过dropout7处理后输出4096个数据。

第八层(fc8):

第七层输出的4096个数据与第八层的1000个神经元进行全连接,经过训练后输出被训练的数值。最后输出的结果,结合softmax做出分类。有几类,就输出几个结点,每个结点保存的是属于该类别的概率值。

以上图文大部分摘抄自他人笔记

相关文章

  • CNN学习笔记-2

    二 卷积过程 1 卷积过程中一些概念 (1) 过程说明 卷积过程实际就是基于一个固定的矩阵(输入像素矩阵),在另一...

  • 2018-12-27制作自己的数据集

    CNN tensorflow 学习笔记(六)- 用自己的数据集训练CNN模型 TFRecord数据集 python...

  • SSD代码阅读

    1.CNN目标检测(三):SSD详解 - 浩瀚之水的专栏 - CSDN博客 2.深度学习笔记(七)SSD 论文阅读...

  • 用 Tensorflow 建立 CNN

    稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。 还有 google 在 udacity 上的 CNN 教程。 ...

  • 学习笔记:CNN

    这是我看过讲解CNN最详细,最清楚的视频,特色是理论和pytorch代码相结合:刘二大人的视频。 首先需要从整体上...

  • CNN学习笔记

    卷积神经网络-CNN 卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习(deep learn...

  • 句子匹配

    1.卷积神经网络(CNN)在句子建模上的应用 2.深度学习笔记——基于双向RNN(LSTM、GRU)和Attent...

  • 深度学习笔记(八)—— CNN-2

    1. 实验内容与流程 1.1 实验要求 1.结合理论课内容,深入理解DenseNet、ResNeXt的结构与Fac...

  • Tensorflow学习笔记--CNN

    输入向量----------------------》与卷积核卷积运算----------------------...

  • ML学习笔记:CNN

    Why CNN for Image Some patterns are much smaller than the...

网友评论

      本文标题:CNN学习笔记-2

      本文链接:https://www.haomeiwen.com/subject/pgaypctx.html