cnn学习笔记

1. cnn是dnn(fully connected)的简化版

    比dnn的参数更少。为什么可以用更少的参数?

    1)因为在每一层的hidden layer里面,每个神经元(neuron)只分析上一层的部分信息,而不是全部的信息。比如对于一个图像识别的任务,第一层的hidden layer中的每一  个neuron可以只负责识别原始图像的一部分信息,如下图所示(图片来自台大李宏毅老师机器学习课程视频),

     

      要识别图片里是否有一只鸟,对于第一层的hidden layer中的每一个neuron,可以只负责识别鸟身体的一小部分,比如有的neuron负责识别是否有鸟嘴,有的neuron负责识        别是否有爪子,有的neuron负责识别是否有翅膀。你把鸟的身体分为几部分就大致需要多少neuron。

      2 )同一张图片里相似的pattern可能出现在不同的区域,可以用同一个neuron,同一组参数识别出这些相似的pattern

       

     3 )可以对图片做subsampling(分别对横向pixels,纵向pixels),而不会改变图片里的pattern

            下图的图像识别任务这么做subsampling是可以的,但是对于诸如alphago

               

 2. cnn的架构

扫描二维码关注公众号,回复: 1060547 查看本文章

 。 


     1 )convolution原理

          在一层的hidden layer里面会有多个filter matrix,每一个filter matrix里面的参数是学出来的,filter的size自己设定。每个filter可以想象为一个具有某个焦距的摄像头,

          用这个摄像头去扫描整张图像。然后换一个焦距,再去扫描图像。

      

           如下图,原始图片里的相同的pattern,经过一个filter之后得到的pixel应该能够保证相同

               

         原始图像经过一个filter之后得到一个feature map

         

          新得到的feature map的size会比原始图像的size要小,size(feature map) = size(原始图像)+1 + 2*pading - stride

          上图中,原始图像里每个pixel只用一个数值来表示,但经过filter作用之后每个位置用两个数值来表示,这就是feature map的深度,而深度其实就是取决于filter matrix 的

          个数。


           为什么说convoluiton是fully connected的简化版

   


              为什么cnn可以实现更少的参数?因为在filter matrix对图像进行滑动扫描的时候,参数是共享的(shared weights)

              

            max polling

            对feature map做groupen操作,对每一个group取最大值,或平均值

                         

2 )cnn实现

      李宏毅老师用的keras来实现cnn

      可以发现后面的convolution层的filter个数一般多于前面的concolution层。这是因为第一层的convolutiuon层的input就是原是图像,所包含的pattern比较少,所以用较少的

      filter就可以应对。而后面的convolution层接收的输入所包含的pattern则更多、更抽象,所以需要更多的pattern。

      





参考资料:

https://www.bilibili.com/video/av10590361/?from=search&seid=1312558671544415597

猜你喜欢

转载自blog.csdn.net/u010859324/article/details/78373148