基于tensorflow的MNIST手写数字识别

基于tensorflow的MNIST手写数字识别(二)--入门篇


一、卷积神经网络模型知识要点卷积卷积

1、卷积
2、池化
3、全连接
4、梯度下降法
5、softmax

本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要就是给大家做个铺垫,如有错误请指正,相互学习共同进步。

二、卷积神经网络讲解

    2.1卷积神经网络作用

     大家应该知道大名鼎鼎的傅里叶变换,即一个波形,可以有不同的正弦函数和余弦函数进行叠加完成,卷积神经网络也是一样,可以认为一张图片是由各种不同特征的图片叠加而成的,所以它的作用是用来提取特定的特征,举个例子,比如给定一张图片,然后我只想提取它的轮廓,于是就需要卷积神经网络。

                                            

2.2卷积神经网络模型

                 

             如图是大名鼎鼎的LeNet-5(识别数字的卷积网络),效果和论文在此,这里拿出来只是为了说明一下卷积神经网络的模型,就像图中那样,经过多次,卷积,池化(又叫子采样),然后全连接,就完工了。

2.3 卷积

        

2.3.1 卷积的原理

其实卷积很好理解,左侧绿色的部分的5*5矩阵其实一般就是我们输入的图片的灰度值(可以想象成一张5px*5px的黑白照片,然后把黑白照片上的每一个点转化成矩阵上的每一个元素),然后上面的黄色部分矩阵就是我们的过滤器,用来提取特征,(其实应该叫滤波器或者卷积核),让卷积核在输入矩阵上进行从左到右,从上到下滑动,然后每一次滑动,两个矩阵对应位置的元素相乘然后求和,就是右边那个矩阵的一个元素。

2.3.2 滑动的步长-stride

上面那张图片从左到右,每次滑动的时候只移动一格,但是其实它一次滑动多格,这就是步长

2.3.3 卷积的边界处理-padding

如上图所示,卷积后的矩阵只有3*3,比原来的图片要小了,因为边界没有了,所以要考虑这个边界的问题,网上说卷积的边界处理有两种方式:
一、丢掉边界,也就是就按右边那个缩小的矩阵来。
二、复制边界,也就是把左边的最外层原封不动地复制过去

但是在看matlab代码和tensorflow代码的时候发现并不是那么简单的事情。
matlab中conv2这个“padding”参数可以设为三个值FULL,SAME,VALID
tensorflow中conv2d的"padding"参数可以设为两个值SAME,VALID

它们对边界是这样处理的,对输入的矩阵,包裹n层0,然后再按照上面所说的卷积方法进行卷积,这个n怎么求呢,
FULL: edge_row = kernel_row - 1;   edge_cols = kernel_cols - 1; 
SAME: edge_row = (kernel_row - 1) / 2;   edge_cols = (kernel_cols - 1) / 2; 
VALID:edge_row = edge_cols = 0;  

edge_row就是边的行数,kernel_row就是卷积核的行数,所以上面讲的其实就是VALID模式
 

         2.3.4 卷积与神经网络


右下角就是卷积的数学公式,矩阵的对应元素相乘求和,然后加上一个偏置值

      2.4 池化

池化分为两种,一种是最大池化,在选中区域中找最大的值作为抽样后的值,另一种是平均值池化,把选中的区域中的平均值作为抽样后的值,这样做的,原因是为了后面全连接的时候减少连接数

2.5 全连接


左边的是没有没有进行卷积的全连接,假设图片是1000*1000的,然后用1M的神经元去感知,最后需要10^12个权值作为参数,右边是经过卷积过的,每个圆点是一个神经元,因此只是用一个卷积核的话,其实只要100*10^6,数量级就大大减少,而且因为提取的就是所需的特征,所以在加快训练速度的时候对结果并不会产生过大的影响,甚至更为精确。


2.6 梯度下降法

可能很多人会问,那个卷积核是怎么得出来的呢,其实它是被各种训练集训练出来的,利用梯度下降法使得我们的参数到达最优解。
梯度下降法可以这样子理解,假设我们正在下山,要使得下山的路径达到最短,于是我们每走一步之前就判断一下四面八方从哪个方向跨出这一步会最短,不过学过算法的人应该都知道,有个问题就是,我们当前走的这一步是当前位置最短的,但是真正从山上到山下最短路径可能并不路过这一步。也就是说这是个局部最优解,而不是全局最优解,我们得到的路径并不一定是最短的,但是也足够优秀,原因就是,得到最优解费时费力,性价比并不高。这一个知识点还是建议大家伙去看一下斯坦福Andrew Ng的《机器学习》,然后就能理解上面所说的权值参数要少的意义了。


2.7最后 softmax

softmax是分类用的,说直白一点就是归一化,因为这个店最好跟例子结合起来,所以暂时不多说,感兴趣的可以去网上找,也可以关注后面的系列文章。

三、总结

其实感觉讲的并不深入,因此还是希望各位能自己去仔细钻研一下,这里给各位一些基础吧,读起论文和数学公式来会更轻松一些。

四、参考

[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-family:Microsoft YaHei;">神经网络介绍  
  2. http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C  
  3.   
  4. 技术向:一文读懂卷积神经网络CNN  
  5. http://www.cnblogs.com/nsnow/p/4562308.html  
  6.   
  7.    
  8. 深度学习(卷积神经网络)一些问题总结  
  9. http://blog.csdn.net/nan355655600/article/details/17690029  
  10.   
  11.   
  12. 卷积神经网络(CNN)  
  13. http://ibillxia.github.io/blog/2013/04/06/Convolutional-Neural-Networks/  
  14.   
  15.   
  16. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN  
  17. http://www.cnblogs.com/nsnow/p/4562363.html  
  18.   
  19.   
  20. 数据挖掘系列(10)——卷积神经网络算法的一个实现(转)  
  21. http://blog.sina.com.cn/s/blog_4ff49c7e0102vl5m.html  
  22.   
  23.   
  24. Matlab/DeepLearnToolbox  
  25. https://github.com/rasmusbergpalm/DeepLearnToolbox  
  26.   
  27.   
  28. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现  
  29. http://blog.csdn.net/zouxy09/article/details/9993371  
  30.   
  31.   
  32.    
  33. Deep Learning论文笔记之(五)CNN卷积神经网络代码理解  
  34.   
  35. http://blog.csdn.net/zouxy09/article/details/9993743  
  36.   
  37.   
  38. 斯坦福  池化  
  39. http://ufldl.stanford.edu/wiki/index.php/%E6%B1%A0%E5%8C%96  
  40.   
  41. CNN神经网络层次分析  
  42. http://blog.csdn.net/liulina603/article/details/44915905  
  43.   
  44. 深度学习笔记1(卷积神经网络)  
  45. http://blog.csdn.net/lu597203933/article/details/46575779  
  46.   
  47.   
  48. CNN公式推导  
  49. http://blog.csdn.net/lu597203933/article/details/46575871  
  50.   
  51. 前向型神经网络之BPNN(附源码)  
  52. http://blog.csdn.net/heyongluoyao8/article/details/48213345  
  53.   
  54. 残差与误差的区别  
  55. http://wenku.baidu.com/link?url=DUDkyV1tnD_SEGzgcxb9AaFU5VUcP9ISNR8q39-fpCcq_LGUHY7ucx5vDwr-MCfU_ofr7yIQZ_UgTfiivTtaDOulW2DD3pGs07eYmiQv5P7  
  56.   
  57. 反向传导算法  
  58. http://deeplearning.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95  
  59.   
  60.   
  61. 图像卷积与滤波的一些知识点  
  62. http://blog.csdn.net/zouxy09/article/details/49080029  
  63.   
  64. CNN卷积神经网络原理简介+代码详解  
  65. http://doc.okbase.net/u012162613/archive/126058.html  
  66.   
  67. 卷积神经网络(lenet)  
  68. http://deeplearning.net/tutorial/lenet.html  
  69.   
  70.   
  71. 激活函数的作用  
  72. https://www.zhihu.com/question/22334626  
  73.   
  74. 神经网络入门第一部分  
  75. http://blog.sina.com.cn/s/blog_6a67b5c50100tspb.html  
  76.   
  77. 神经网络入门第二部分  
  78. http://blog.sina.com.cn/s/blog_6a67b5c50100tspe.html  
  79.   
  80. 卷积神经网络全面解析  
  81. http://www.moonshile.com/post/juan-ji-shen-jing-wang-luo-quan-mian-jie-xi  
  82.   
  83. Deep learning:四十一(Dropout简单理解)  
  84. http://www.cnblogs.com/tornadomeet/p/3258122.html  
  85.   
  86. DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络  
  87. http://www.07net01.com/2015/11/963741.html  
  88.   
  89.    
  90. 深度卷积网络CNN与图像语义分割  
  91. http://blog.csdn.net/xiahouzuoxin/article/details/47789361  
  92.   
  93.    
  94. MATLAB conv2卷积的实现  
  95. http://blog.csdn.net/celerychen2009/article/details/38852105  
  96. </span>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值