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

三、总结

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

四、参考

<span style="font-family:Microsoft YaHei;">神经网络介绍
http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C

技术向:一文读懂卷积神经网络CNN
http://www.cnblogs.com/nsnow/p/4562308.html

 
深度学习(卷积神经网络)一些问题总结
http://blog.csdn.net/nan355655600/article/details/17690029


卷积神经网络(CNN)
http://ibillxia.github.io/blog/2013/04/06/Convolutional-Neural-Networks/


Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://www.cnblogs.com/nsnow/p/4562363.html


数据挖掘系列(10)——卷积神经网络算法的一个实现(转)
http://blog.sina.com.cn/s/blog_4ff49c7e0102vl5m.html


Matlab/DeepLearnToolbox
https://github.com/rasmusbergpalm/DeepLearnToolbox


Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
http://blog.csdn.net/zouxy09/article/details/9993371


 
Deep Learning论文笔记之(五)CNN卷积神经网络代码理解

http://blog.csdn.net/zouxy09/article/details/9993743


斯坦福  池化
http://ufldl.stanford.edu/wiki/index.php/%E6%B1%A0%E5%8C%96

CNN神经网络层次分析
http://blog.csdn.net/liulina603/article/details/44915905

深度学习笔记1(卷积神经网络)
http://blog.csdn.net/lu597203933/article/details/46575779


CNN公式推导
http://blog.csdn.net/lu597203933/article/details/46575871

前向型神经网络之BPNN(附源码)
http://blog.csdn.net/heyongluoyao8/article/details/48213345

残差与误差的区别
http://wenku.baidu.com/link?url=DUDkyV1tnD_SEGzgcxb9AaFU5VUcP9ISNR8q39-fpCcq_LGUHY7ucx5vDwr-MCfU_ofr7yIQZ_UgTfiivTtaDOulW2DD3pGs07eYmiQv5P7

反向传导算法
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


图像卷积与滤波的一些知识点
http://blog.csdn.net/zouxy09/article/details/49080029

CNN卷积神经网络原理简介+代码详解
http://doc.okbase.net/u012162613/archive/126058.html

卷积神经网络(lenet)
http://deeplearning.net/tutorial/lenet.html


激活函数的作用
https://www.zhihu.com/question/22334626

神经网络入门第一部分
http://blog.sina.com.cn/s/blog_6a67b5c50100tspb.html

神经网络入门第二部分
http://blog.sina.com.cn/s/blog_6a67b5c50100tspe.html

卷积神经网络全面解析
http://www.moonshile.com/post/juan-ji-shen-jing-wang-luo-quan-mian-jie-xi

Deep learning:四十一(Dropout简单理解)
http://www.cnblogs.com/tornadomeet/p/3258122.html

DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络
http://www.07net01.com/2015/11/963741.html

 
深度卷积网络CNN与图像语义分割
http://blog.csdn.net/xiahouzuoxin/article/details/47789361

 
MATLAB conv2卷积的实现
http://blog.csdn.net/celerychen2009/article/details/38852105
</span>






  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: TensorFlow MNIST手写识别是一种基于TensorFlow框架的机器学习模型,用于识别手写。该模型使用MNIST数据集进行训练和测试,该数据集包含了大量的手写图片和对应的标签。通过训练模型,可以使其能够自动识别手写,并对其进行分类。这种技术在数识别、图像识别等领域有着广泛的应用。 ### 回答2: Tensorflow是Google推出的一款机器学习框架,是目前使用最广泛的深度学习框架之一。其中,mnist手写识别TensorFlow中最基础、最经典的示例之一。 mnist数据集是由60,000个训练样本和10,000个测试样本组成的,每个样本都是28*28像素的灰度图像,代表着0~9中的一个数。其目的是要让开发者们搭建一个能够准确识别手写机器学习模型Tensorflow通过建立计算图的方式来进行模型的训练和预测。首先,需要下载mnist数据集,并将其转化为可以使用的Tensorflow格式。 Tensorflow提供了一个方便的函数,用于读取、解析和预处理数据集。 接着,需要定义神经网络模型。在mnist手写识别中,常见的是使用卷积神经网络(CNN),由于手写数据集较小,因此简单的结构就可以取得不错的效果。 然后,需要进行模型训练,也就是反向传播算法。在这一步骤中,需要定义一些超参数,例如学习率、损失函数和优化器等,并进行模型训练。训练结束后,可以对训练模型进行评估和测试,以检测模型性能,并进行优化。 最后,使用训练好的模型进行预测,即输入一张手写图片,并输出它所代表的数。在这个过程中,需要将输入的图像进行预处理,并通过训练好的模型进行推断,最终得到预测的数。 总的来说,Tensorflow mnit手写识别是一个非常基础、入门的机器学习示例,其不仅有助于学习Tensorflow的使用方法,还可以提高模型训练和优化的实战能力。对于深度学习初学者以及需要进行手写识别的开发者来说,这是一个非常值得学习的项目。 ### 回答3: TensorFlow MNIST是一个普遍使用的机器学习问题,是识别手写的问题。MNIST数据集中的数是通过手写书写的,每个数在数据集中表示为$28 \times 28$像素的图像。这个问题是非常有趣的,因为它既有实际的应用,也有趣味性。MNIST数据集包含60,000张训练图像和10,000张测试图像。每个图像都被标记为表示数的标签。该问题的目标是为一个图像分类器编写代码,使它尽量准确地将每个数的图像与正确的标签匹配。 TensorFlow是一种流行的机器学习框架,用于在许多不同的环境中开发人工智能模型。它支持使用Python等语言编写代码,并且由于其可扩展性和可移植性而受到欢迎。 TensorFlow MNIST问题的解决方案涉及构建深度学习模型,使用卷积神经网络和softmax回归来进行图像分类。这个模型利用TensorFlow的高级API构建,具有简单易用的界面,使得新手也能轻松地理解和使用。 首先,需要对MNIST数据集进行加载和预处理。然后,构建一个卷积神经网络模型,其结构可自定义调整。然后,通过反向传播过程训练模型,使其能够检测和识别MNIST数据集中的数。在训练完成后,测试数据集用于检测模型的准确性,以确定模型的性能是否满足需求。 TensorFlowMNIST手写识别问题可以帮助新手熟悉机器学习中最基础的问题和技术,如CNN和softmax回归,以及如何使用TensorFlow API安装和建立一个深度学习模型。它还可以帮助学习者理解模型堆栈、卷积核、激活函数和权重等概念,以及在训练和测试时如何对其进行微调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值