荣耀7x支持荣耀7x面部解锁锁吗

算法(49)
卷积神经网络(深度学习)一些问题总结
版权归原作者所有
********************************************************
深度卷积网络
涉及问题:
1.每个图如何卷积:
&(1)一个图如何变成几个?
&(2)卷积核如何选择?
2.节点之间如何连接?
3.S2-C3如何进行分配?
4.16-120全连接如何连接?
5.最后output输出什么形式?
①各个层解释:
& 我们先要明确一点:每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每个Feature Map有多个神经元。
& C1层是一个卷积层(为什么是卷积?卷积运算一个重要的特点就是,通过卷积运算,可以使原信号特征增强,并且降低噪音),由6个特征图Feature
Map构成。特征图中每个神经元与输入中5*5的邻域相连。特征图的大小为28*28,这样能防止输入的连接掉到边界之外(是为了BP反馈时的计算,不致梯度损失,个人见解)。C1有156个可训练参数(每个滤波器5*5=25个unit参数和一个bias参数,一共6个滤波器,共(5*5+1)*6=156个参数),共156*(28*28)=122,304个连接。
& S2层是一个下采样层(为什么是下采样?利用图像局部相关性的原理,对图像进行子抽样,可以减少数据处理量同时保留有用信息),有6个14*14的特征图。特征图中的每个单元与C1中相对应特征图的2*2邻域相连接。S2层每个单元的4个输入相加,乘以一个可训练参数,再加上一个可训练偏置。结果通过sigmoid函数计算。可训练系数和偏置控制着sigmoid函数的非线性程度。如果系数比较小,那么运算近似于线性运算,亚采样相当于模糊图像。如果系数比较大,根据偏置的大小亚采样可以被看成是有噪声的“或”运算或者有噪声的“与”运算。每个单元的2*2感受野并不重叠,因此S2中每个特征图的大小是C1中特征图大小的1/4(行和列各1/2)。S2层有12个可训练参数和5880个连接。
图:卷积和子采样过程:卷积过程包括:用一个可训练的滤波器fx去卷积一个输入的图像(第一阶段是输入的图像,后面的阶段就是卷积特征map了),然后加一个偏置bx,得到卷积层Cx。子采样过程包括:每邻域四个像素求和变为一个像素,然后通过标量Wx+1加权,再增加偏置bx+1,然后通过一个sigmoid激活函数,产生一个大概缩小四倍的特征映射图Sx+1。
& 所以从一个平面到下一个平面的映射可以看作是作卷积运算,S-层可看作是模糊滤波器,起到二次特征提取的作用。隐层与隐层之间空间分辨率递减,而每层所含的平面数递增,这样可用于检测更多的特征信息。
& C3层也是一个卷积层,它同样通过5x5的卷积核去卷积层S2,然后得到的特征map就只有10x10个神经元,但是它有16种不同的卷积核,所以就存在16个特征map了。这里需要注意的一点是:C3中的每个特征map是连接到S2中的所有6个或者几个特征map的,表示本层的特征map是上一层提取到的特征map的不同组合(这个做法也并不是唯一的)。(看到没有,这里是组合,就像之前聊到的人的视觉系统一样,底层的结构构成上层更抽象的结构,例如边缘构成形状或者目标的部分)。
& 刚才说C3中每个特征图由S2中所有6个或者几个特征map组合而成。为什么不把S2中的每个特征图连接到每个C3的特征图呢?原因有2点。第一,不完全的连接机制将连接的数量保持在合理的范围内。第二,也是最重要的,其破坏了网络的对称性。由于不同的特征图有不同的输入,所以迫使他们抽取不同的特征(希望是互补的)。
& 例如,存在的一个方式是:C3的前6个特征图以S2中3个相邻的特征图子集为输入。接下来6个特征图以S2中4个相邻特征图子集为输入。然后的3个以不相邻的4个特征图子集为输入。最后一个将S2中所有特征图为输入。这样C3层有1516个可训练参数和151600个连接。
& S4层是一个下采样层,由16个5*5大小的特征图构成。特征图中的每个单元与C3中相应特征图的2*2邻域相连接,跟C1和S2之间的连接一样。S4层有32个可训练参数(每个特征图1个因子和一个偏置)和2000个连接。
& C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连。由于S4层特征图的大小也为5*5(同滤波器一样),故C5特征图的大小为1*1:这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全相联层,是因为如果LeNet-5的输入变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。
& F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生单元i的一个状态。
& 最后,输出层由欧式径向基函数(Euclidean Radial Basis Function)单元组成,每类一个单元,每个有84个输入。换句话说,每个输出RBF单元计算输入向量和参数向量之间的欧式距离。输入离参数向量越远,RBF输出的越大。一个RBF输出可以被理解为衡量输入模式和与RBF相关联类的一个模型的匹配程度的惩罚项。用概率术语来说,RBF输出可以被理解为F6层配置空间的高斯分布的负log-likelihood。给定一个输入模式,损失函数应能使得F6的配置与RBF参数向量(即模式的期望分类)足够接近。这些单元的参数是人工选取并保持固定的(至少初始时候如此)。这些参数向量的成分被设为-1或1。虽然这些参数可以以-1和1等概率的方式任选,或者构成一个纠错码,但是被设计成一个相应字符类的7*12大小(即84)的格式化图片。这种表示对识别单独的数字不是很有用,但是对识别可打印ASCII集中的字符串很有用。
& 使用这种分布编码而非更常用的“1 of N”编码用于产生输出的另一个原因是,当类别比较大的时候,非分布编码的效果比较差。原因是大多数时间非分布编码的输出必须为0。这使得用sigmoid单元很难实现。另一个原因是分类器不仅用于识别字母,也用于拒绝非字母。使用分布编码的RBF更适合该目标。因为与sigmoid不同,他们在输入空间的较好限制的区域内兴奋,而非典型模式更容易落到外边。
& RBF参数向量起着F6层目标向量的角色。需要指出这些向量的成分是+1或-1,这正好在F6
sigmoid的范围内,因此可以防止sigmoid函数饱和。实际上,+1和-1是sigmoid函数的最大弯曲的点处。这使得F6单元运行在最大非线性范围内。必须避免sigmoid函数的饱和,因为这将会导致损失函数较慢的收敛和病态问题。
②问题讲解
第1个问题:
(1)输入-C1
用6个5*5大小的patch(即权值,训练得到,随机初始化,在训练过程中调节)对32*32图片进行卷积,得到6个特征图。
(2)S2-C3
C3那16张10*10大小的特征图是怎么来?
将S2的特征图用1个输入层为150(=5*5*6,不是5*5)个节点,输出层为16个节点的网络进行convolution。
该第3号特征图的值(假设为H3)是怎么得到的呢?
& 首先我们把网络150-16(以后这样表示,表面输入层节点为150,隐含层节点为16)中输入的150个节点分成6个部分,每个部分为连续的25个节点。取出倒数第3个部分的节点(为25个),且同时是与隐含层16个节点中的第4(因为对应的是3号,从0开始计数的)个相连的那25个值,reshape为5*5大小,用这个5*5大小的特征patch去convolution S2网络中的倒数第3个特征图,假设得到的结果特征图为h1。
& 同理,取出网络150-16中输入的倒数第2个部分的节点(为25个),且同时是与隐含层16个节点中的第5个相连的那25个值,reshape为5*5大小,用这个5*5大小的特征patch去convolution S2网络中的倒数第2个特征图,假设得到的结果特征图为h2。
& 最后,取出网络150-16中输入的最后1个部分的节点(为25个),且同时是与隐含层16个节点中的第5个相连的那25个值,reshape为5*5大小,用这个5*5大小的特征patch去convolution S2网络中的最后1个特征图,假设得到的结果特征图为h3。
&&最后将h1,h2,h3这3个矩阵相加得到新矩阵h,并且对h中每个元素加上一个偏移量b,且通过sigmoid的激发函数,即可得到我们要的特征图H3了。
第二个问题:
上图S2中为什么是150个节点?(涉及到权值共享和参数减少)
CNN一个牛逼的地方就在于通过感受野和权值共享减少了神经网络需要训练的参数的个数。
下图左:如果我们有像素的图像,有1百万个隐层神经元,那么他们全连接的话(每个隐层神经元都连接图像的每一个像素点),就有个连接,也就是10^12个权值参数。然而图像的空间联系是局部的,就像人是通过一个局部的感受野去感受外界图像一样,每一个神经元都不需要对全局图像做感受,每个神经元只感受局部的图像区域,然后在更高层,将这些感受不同局部的神经元综合起来就可以得到全局的信息了。这样,我们就可以减少连接的数目,也就是减少神经网络需要训练的权值参数的个数了。如下图右:假如局部感受野是10x10,隐层每个感受野只需要和这10x10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来减少了四个0(数量级),这样训练起来就没那么费力了,但还是感觉很多的啊,那还有啥办法没?
& 我们知道,隐含层的每一个神经元都连接10x10个图像区域,也就是说每一个神经元存在10x10=100个连接权值参数。那如果我们每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有多少个参数??只有100个参数啊!!!亲!不管你隐层的神经元个数有多少,两层间的连接我只有100个参数啊!亲!这就是权值共享啊!亲!这就是卷积神经网络的主打卖点啊!亲!(有点烦了,呵呵)也许你会问,这样做靠谱吗?为什么可行呢?这个……共同学习。
& 好了,你就会想,这样提取特征也忒不靠谱吧,这样你只提取了一种特征啊?对了,真聪明,我们需要提取多种特征对不?假如一种滤波器,也就是一种卷积核就是提出图像的一种特征,例如某个方向的边缘。那么我们需要提取不同的特征,怎么办,加多几种滤波器不就行了吗?对了。所以假设我们加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积图像就得到对图像的不同特征的放映,我们称之为Feature
Map。所以100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。到这个时候明了了吧。我们这一层有多少个参数了?100种卷积核x每种卷积核共享100个参数=100x100=10K,也就是1万个参数。才1万个参数啊!亲!(又来了,受不了了!)见下图右:不同的颜色表达不同的滤波器。
& 嘿哟,遗漏一个问题了。刚才说隐层的参数个数和隐层的神经元个数无关,只和滤波器的大小和滤波器种类的多少有关。那么隐层的神经元个数怎么确定呢?它和原图像,也就是输入的大小(神经元个数)、滤波器的大小和滤波器在图像中的滑动步长都有关!例如,我的图像是像素,而滤波器大小是10x10,假设滤波器没有重叠,也就是步长为10,这样隐层的神经元个数就是(
)/ (10x10)=100x100个神经元了,假设步长是8,也就是卷积核会重叠两个像素,那么……我就不算了,思想懂了就好。注意了,这只是一种滤波器,也就是一个Feature Map的神经元个数哦,如果100个Feature Map就是100倍了。由此可见,图像越大,神经元个数和需要训练的权值参数个数的贫富差距就越大。
所以这里可以知道刚刚14*14的图像计算它的节点,按步长为3计算,则一幅图可得5*5个神经元个数,乘以6得到150个神经元个数。
需要注意的一点是,上面的讨论都没有考虑每个神经元的偏置部分。所以权值个数需要加1&。这个也是同一种滤波器共享的。
总之,卷积网络的核心思想是将:局部感受野、权值共享(或者权值复制)以及时间或空间亚采样这三种结构思想结合起来获得了某种程度的位移、尺度、形变不变性。
第三个问题:
如果C1层减少为4个特征图,同样的S2也减少为4个特征图,与之对应的C3和S4减少为11个特征图,则C3和S2连接情况如图:
第四个问题:
C5对C4层进行卷积操作,采用全连接方式,即每个C5中的卷积核均在S4所有16个特征图上进行卷积操作。
第五个问题:
采用one-of-c的方式,在输出结果的1*10的向量中最大分量对应位置极为网络输出的分类结果。对于训练集的标签也采用同样的方式编码,例如,则表明是数字0的分类。
刚开始学深度学习,还是新手,这些是我一些疑惑的整理,整理出来希望能对一些刚入门的朋友一些帮助,中间可能有些不正确的地方,希望能够指正。
另外一些关于卷积神经网络的参考
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:60368次
排名:千里之外
转载:94篇
(1)(4)(1)(6)(12)(46)(2)(27)(1)(1)您还可以使用以下方式登录
当前位置:&>&&>&&>& > 深度学习笔记五:卷积神经网络CNN(基本理论)
深度学习笔记五:卷积神经网络CNN(基本理论)
一.初识卷积网络结构Ⅰ.概览前面已经做过手写体识别的任务。之前我们只是使用了两层的全连接层,或者根据喜好多加几层。我更喜欢把这样的结构叫做多层感知机,即使用到了一些现代的权重初始化方式,更好的激活函数reLU等,我还是倾向于叫做多层感知机。对于前面的这个手写体的识别任务,我们一开始就把图片展开成了一个一维的向量来做的(要是你有印象的话),虽然效果还行,但是却忽略了很重要的一点,那就是位置关系。以这个喵的图片为例,我们的任务现在是想识别这只猫,按照之前的做法就是把这幅图片弄成一个一维向量,然后丢到网络里面去跑。但是人眼应该不是这样子的吧。虽然现在对于人眼识别东西原理还没有完全知道,但是你识别东西是先把你看到的弄成一个一维向量了去识别的?猫的鼻子下面有嘴巴,鼻子上面有眼睛,这都是很明确的位置关系,但是要是弄成了一维向量,那还有位置关系吗?也就没有了。因此接下来就引入卷积神经网络以及卷积神经网络的一些基本概念:局部感受野(local receptive fields)权值共享(Shared weights and biases)池化(pooling)Ⅱ.局部感受野(local receptive fields)在讲局部感受野之前,首先要知道的是,这个中文名词看到很多地方都是这么翻译,所以就这么翻译了,我本人并不知道怎么翻译这个。你也可以叫做局部感知。要是都是不对你胃口,那就直接看英文就行了。更重要的是我们不再需要将一幅图片做成一个一维向量了。比如你现在的输入是28x28,那就是28x28,或者当有颜色通道的时候,比如28x28x3,就是宽高都是28,有3个颜色通道。这个很简单很好理解。没有图的话理解肯定是不是很直观的,这里开始搬图了。从Deep learning 搬过来,上图就已经代表你的输入了,你原来是什么输入,不用再变成一维了,直接拿过来用就行了(可能有一些预处理什么的,但是不足以改变位置信息)既然输入是上面这个样子了,这里就可以开始讲局部感受野了。有了输入之后,肯定要把输入连接到隐藏层的神经元了,这里应该怎么连接呢?还是像以前的全连接层那样每个输入都连接一个神经元?那肯定不是的,那样就和多层感知机没什么区别了。这里很大的一个改变就是采用了&可以滑动的窗口&。可以滑动的窗口在这里是一个非常不正规的名词,但是确是很通俗的。搬一张图片先感受一下。图中间的那个就是可以滑动的窗口了,他的作用是和输入相应的&感受域&下的像素做运算得到新的值。这个运算就是&卷积&运算了。图上面有详细的运算过程。实际上就是每个相应元素的值相乘,然后把得到的都加起来。很简单。重点说明,中间的这个窗口的本质是其中的数字和一个偏置构成的,非常常见的是把这个窗口叫做滤波器或者卷积核,要是看见了这两个名词,要能够知道是什么意思。这里说两点,第一点就是上图是对于一个颜色通道的输入做卷积操作的。你看到这里只有一个通道。但是并不是意味输入只能够是一个通道。常见的三通道也是可以的。这个后面会再讲,原理差不多,很简单。第二点就是,你看到的那个窗口是可以滑动的,你可以指定每次的滑动步长。这里太抽象,直接上经典的动图看感性理解一下。这幅动图是一个三个通道的输入,然后&滑动窗口&的维度是3x3x3,至于为什么会是这样的维度后面会详细来讲。在这幅图片里面你暂时能够得出的信息就是他的滑动的直观理解,窗口是怎么样子的。知道这些就够了。这一节的目标就是建立一个感性的认识。等先有个模型在脑子里面,后面量化就简单了。Ⅲ.权值共享(Shared weights and biases)你可以把滑动窗口看做是一个隐藏神经元,而窗口里面的数字就是连接输入(这里暂且看做是输入)局部感受野的上面的权重。我们的任务就是学习到这些权重来提取特征。如下图要是这些话很难理解的话,你就记住,我们把卷积核(上面滑动的窗口)里面那些数字叫做权重,是可以学习的。我们要学习的就是窗口里面的那些数字,而这些数字对于一幅图来说都是相同的。就像动图里面的那个样子。就这么理解就行了。为什么要这个样子,后面会深入的来讲。你这里先记住。同样,一个卷积核(滑动窗口)都是带一个偏置的,同样的,偏置在整幅图上面也是一样的。对于一幅图,你可以有多个卷积核,并不是只能够有一个。这里方便理解就没有多列出,后面详细讲。Ⅳ.池化(pooling)原图经过一个&滑动窗口&的折腾,会得到什么呢?还是直接上图上图是一个max pooling的过程,原理超简单,以这里为例,就是2x2的格子里面找到值最大的拿出来,所有的构成一个新的。这个有什么用呢?上图4X4变成了2x2,数据量减少了。你自己可以通过20X20的试一下,明显会发现得到的新的map减少了。所以作用就是减少数据的量,进一步减少参数的量。参数减少了,内存会happy,速度会起来,过拟合也没有那么强烈了。这就是好处。Ⅴ.网络架构感性认识至此,卷积网络的一些最基本的概念就在这里说了,感性认识也有了。但是还不是很系统。这里又搬过来一张图来大概的了解一下架构。上面这幅图可以看做是一个识别车的架构。中间交叉的有卷积层,reLU激活层,池化层(pooling),到最后的全连接层(FC),然后对类别打分,然后判断是否是车。要是前面亲手做过全连接网络版本的手写字体识别的话,这幅图很容易看懂。至此,比较基本的结构就讲完了。这部分仅仅是非常基础的感性认识部分,并不是很困难。后面更加深入来讲卷积网络。二.再看卷积神经网络结构上一节我们感性认识了神经网络的基本结构,这一节更加深度的某些地方定量的来看一下卷积神经网路的结构。这里以斯坦福的cs231n为主要的笔记来源。Convolutional Neural Networks (CNNs / ConvNets)卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度这里先解释下:一开始的时候我们讲深度,更多的是指代的神经网络的层数,在卷积层这里我们讲深度指的是数据或者filter的第三个维度。这里的图是拿的CS231n的课件PPT可以看到上图的图片就是一个32x32x3的图片,其中的3代表是3通道,也就是说有3个颜色通道,这个很简单。同样,这里的滤波器(filter)也是三维的结构,其中最后面的3和数据的第三个维度是一样的。这样是不是更加容易理解。有了这个最基本的知识,就再次搬一下前面说的那幅图。一般最基本的卷积神经网络的架构可以是:[输入层-卷积层-ReLU层-汇聚层-全连接层]我们使用上面的图片来大致讲解一下各层的作用:输入层:我更加喜欢直接叫做输入,比如上面那辆车可以抽象为[32x32x3]存有图像的原始像素值,表示宽32,高32,3个颜色通道卷积层:神经元与输入层中的一个局部区域相连,每个神经元都计算自己与输入层相连的小区域与自己权重的内积。也就是我们前面说过的卷积核运行的这层。ReLU层:将会逐个元素地进行激活函数ReLU操作,该层对数据尺寸没有改变。Pooling层:Pooling层在在空间维度(宽度和高度)上进行降采样(downsampling)操作,数据的尺寸一般会变下。全连接层:将会计算分类评分,数据尺寸变为[1x1x10],其中10个数字对应的就是CIFAR-10中10个类别的分类评分值。也就是我们前面提到过得通俗意义上面的全连接层啦。接下来就详细的一个层一个层的来讲了。Ⅰ.卷积层卷积层肯定是卷积网络中最重要的一层啦,毕竟叫做卷积神经网络。卷积层的参数是有一些可学习的滤波器集合(前面提到过得滑动窗口)构成的。滤波器的宽度和高度一般不大,深度和输入数据一致,这是前面说过的。见下图上面的图的意思就是原图像是32x32x3,然后我们有一个滑动窗口(filter)为5x5x3,5x5的宽高相比起32x32来说,还是不大的,深度为3是和输入数据一样的。一个卷积核在输入图上面滑动(见前面的动图)可以生成一个activation map(激活图?我不知道怎么翻译),激活图到底是什么东西呢?这里不理解没有关系,暂时理解为可以得到边缘呀,得到某些形状呀,得到某些特征的一个特征图就行了。之后会给出直观感性的解释。上图右边的就是activation map啦,至于28这个数字怎么来的,看一下动图就知道了,后面同样会给出计算的方法。不同的卷积核(filter)能够得到不同的激活图,将这些激活映射在深度方向上层叠起来就生成了输出数据。所以,在用了6个filter之后,我们可以得到28x28x6的激活图。(参照图来看理论,这个计算要记得)到这里就来一个例子来理一下,输入尺寸和滤波器尺寸之间的关系,(这里还还要注意的一个尺寸是激活图的尺寸,放到接下来讲零填充,步长等等的时候再讲怎么得到激活图的尺寸,其实超简单)上图中,输入是32x32x3,用了6个5x5x3的滤波器,前面说过,滤波器的宽高尺寸自己定,深度为3是因为必须和输入的数据一样,用了6个滤波器,意味着接下来得到的激活图的深度是6维的。所以,接下来的激活图的尺寸为28x28x6。然后这个激活图作为输入,用了10个5x5x6的滤波器,还是那句话,滤波器的宽高尺寸自己定,但是深度为6是因为输入的深度是6,10个滤波器意味着得到的激活图的深度是6维的,即得到24x24x10.上面的要是会了的话,就可以看窗口滑动的详细细节了。直观一点,丢一个动图。这里可以看到是3x3的窗口,每次滑动的距离是1个,这个就叫做步长(stride)。你可以自己尝试着用笔画一下,得到的输出应该是5x5的激活图。那么再试一下步长为2,照例丢一个动图。那么会输出一个3x3的激活图。那么使用步长为3呢?发现就无法很好地适配了。这里给出一个通用的输出尺寸的计算公式:但是有一个问题,比如下图,每经过一个filter,得到的激活图就会小一些,要是多经过几个,那岂不是最后什么都不见啦?所以解决的办法就叫做零填充(zero padding),其实很简单啦,就是在输入上面填充一圈或者几圈的0,就这么简单。如下图是填充了一圈的0之后的样子。那么你会发现,N变为了N+p*2 (这里p代表圈数)为什么p乘以2呢,因为加了一圈之后两侧都加了1啊。所以N+p*2 ,那么得到新的公式为:这个公式表示,相应原输入尺寸,步长,框口尺寸下面,加圈后得到的输出尺寸。举例子:上面那幅图之前是7x7,也就是说N=7 ,窗口尺寸为3,即F=3 ,步长为1,stride=1 ,加了一圈即p=1那么可以算出新的尺寸为:还是7,意味着这样组合下面的新的尺寸是可以保持不变的。那么,我希望加p圈保持原来的输入尺寸不变,怎么计算这个p的大小呢?初中数学啦。到这里举两个例子复习一下:1.输入数据是32x32x3,用了10个5x5的滤波器,步长为1,填充2圈,那么输出的尺寸是多少?这层的参数数量有多少个?又因为使用了10个滤波器,那么可以知道输出的尺寸是32x32x10参数数量主要是滤波器的权重和偏置。一个滤波器的话就是5*5*3+1=76个,因为有10个滤波器,那么一共有10*76=760个.上面都是正方形的,现在来总结和通用化一些公式:最后,再回到那个很有名的动图来:详细地分析一下这个动图的运作过程。首先可以得到输入(没有zero padding的原始数据)为W=5(宽度),H=5(高度),D=3(深度),意味着我需要深度为3的滤波器,至于滤波器宽高自己定义。图上来说,滤波器的宽高都是3,即F=3,深度为3(可以看到图上w0和w1都有3个分量)。而且有2个滤波器,即K=2,K=2意味着我输出的深度为2(可以看到output volume有2个分量)。加了一圈的0,意味着p=1,一次移动两格,意味着s=2那么通过这些信息,我们已经能够手算出输出的尺寸了,知道尺寸了,现在来看具体其中的数值是怎么得到的。首先看最开始的那一下:第一个滤波器的不同深度的分量和输入数据相应深度的分量分别做卷积操作。具体来说就是:对于x[:,:,0] 的那一小块和w0[:,:,0]做卷积:即(0*1)+(0*0)+(0*0)+(0*1)+(1*0)+(2*0)+(0*-1)+(2*0)+(0*1)=0对于x[:,:,1] 的那一小块和w0[:,:,1]做卷积:即(0*1)+(0*-1)+(0*1)+(0*-1)+(1*-1)+(1*0)+(0*-1)+(2*0)+(1*1)=0对于x[:,:,2] 的那一小块和w0[:,:,2]做卷积:即(0*1)+(0*-1)+(0*-1)+(0*1)+(0*1)+(1*1)+(0*0)+(1*-1)+(1*0)=0最后结果为0+0+0+1=1然后其他的每移动一个步长,都这么计算一次,得到一个结果。Ⅱ.池化层(Pooling layer)前面已经贴过两张图片,池化层的作用就是减少feature map的空间尺寸,达到减少参数进一步达到控制过拟合的作用。池化层并不会对于feature map的深度有影响。还是会保持原来的深度。现在常用的pooling 操作有max pooling(最大值pooling)或者average pooling(平均值pooling)等等,以max pooling为例上图中,pooling的尺寸是2x2,步长为2,你可以看到就是在四个格子里面选择最大的值,然后所有的组合起来,大小明显减小了。average pooling和max pooling的不同就是前者是求均值,后者求最大值。然后给出一组公式:就爱阅读网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
欢迎转载:
推荐:    }

我要回帖

更多关于 荣耀7x面部解锁 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信