卷积神经网络(CNN)

最近可能会用到CNN,今天回顾一下,并找到了一些大神的精华帖,顺便作个总结。算法

CNN是时下很是火的一种深度学习算法,它是一种前馈神经网络,即神经元只与先后层有联系,在同一层的神经元无联系。笔者用下面这张图用来讲明卷积神经网络的工做原理网络

这是一个识别字母的CNN结构图,最左边是32*32像素的输入,而后通过了6个隐含层,最终获得输出,输出有10个类别,分别是要识别的10个字母的标记。假设咱们已经训练好CNN,那么从输入到C1层有6个特征映射,也就是分别用6个训练好的卷积核分别对32*32的输入作了4个特征抽取(或者称为4次扫描),扫描的过程是这样的:将卷积核左上角与输入图片左上角重叠,而后向右或向下依次移动striding个单位(这里以strding=1为例来讲明),这样能够获得28*28的输出,下面这张图表示了卷积计算的过程:函数

卷积核与输入像素对应位置的值相乘,而后求和就获得了一次卷积计算的输出。实际获得的特征输出还须要在此基础上加一个偏置(bias),而后以此做为sigmoid函数的参数,计算获得的sigmoid函数的输出才是对应特征输出的结果,这样作目测是为了方便后续的训练,由于训练过程须要各类求导。。学习

咱们作卷积运算也只是对输入图片作了一次模糊处理(能够叫特征抽象),这一步操做能够取到一些边缘特征。这样作在获得6组28*28的特征输出以后,还须要对卷积计算后的28*28的特征作一次池化(pooling),获得了S2层,这样作的目的是能够保证旋转不变形,(好比克服猫耳朵旋转或者由于拍摄角度不一样而形成的影响)。池化有不少种方法,好比能够选择Max-Pooling(范围内最大值)或者L2-Pooling(范围内每一个值的平方和的平方根),这里获得S2层选择的是一个2*2的邻域作池化。3d

第一次池化完成后能够跟着连续n个卷积-池化的操做,从最后的隐含层到输出层的时候是一个相似于BP神经网络的全链接(每一个隐含层的神经元与输出神经元的全链接)。blog

在卷积-池化的过程当中,能够想象某一次的卷积操做彻底覆盖了字母A的特征,那么下一步的池化能够保证字母A一动一下位置也能识别,这样保证了平移不变性(我的理解)>图片

CNN的训练和BP神经网络同样也是反向传播,关于反向传播,能够参考上一篇BP神经网络,这里再也不赘述。深度学习

总之,CNN的过程特征抽象与特征泛化的交替进行,有了池化,才不至于过拟合!基础

相关文章
相关标签/搜索