TensorFlow学习笔记(三):Tutorial第二个例子-深入MNIST-卷积神经网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nxcxl88/article/details/52132763

1. 卷积神经网络结构及与LeNet-5的区别

在网上找了一个卷积神经网络的教程,http://blog.csdn.net/zouxy09/article/details/8781543/

其实最好学习卷积神经网络的读本是Lecun的论文(http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf),在这篇论文里面较为详尽的解释了什么是卷积神经网络,并且阐述了为什么要卷积,为什么要降采样,RBF怎么用之类的。但是注意Lecun所做的卷积神经网络LeNet-5只是卷积神经网络的一种组合形式,具体使用的时候还要根据具体的需求调整。

TensorFlow教程里面使用的卷积神经网络的结构就和LeNet-5的不太一样。

1. 卷积过程完成后,TensorFlow这个实例没有使用传统的Sigmoid函数,而是用了ReLu(Rectified Linear Unit 修正线性函数)。ReLu就是对负输入输出0,对正数输出线性输出,这样就形成了单侧抑制。

2. 求取特征图后,要进行pooling(池化,其实叫降采样可能更好一点),TensorFlow用的是max-pooling,就是就特征图一区域里面的最大值,而LeNet-5里面用的就是mean-pooling。

3. TensorFlow经过若干的卷积和池化后接的是Softmax,而LeNet-5接的是RBF。

4. TensorFlow有两种卷积模式“VALID”和“SAME”,使用前一种模式的时候,计算过程中卷积核只会覆盖那些有值区域,所以算出的结果会比输入图像小,使用SAME模式时,卷积核也会覆盖那些图片外面的区域,保证计算出来的结果和输入图像的大小一样。

所以,在TensorFlow这个例子里面,它采用的模式是SAME,经过第一次卷积,使用了32种卷积核,计算出32张28*28的特征图,经过一次2*2大小的MAX Pooling,减为14*14,然后再经过第二次卷积,计算出64张14*14的特征图(每个图都用了两个卷积核),再经过一次MAX Pooling,得到7*7的图,将这个图输入到有7*7*64个输入,1024个输出的全连接神经网络,然后再加一个SoftMax层,就得到最后的10个概率值。

如果对比LeNet-5,不同的地方还是很多的。

在教程阐述网络结构的时候,有这样的一句话:“TensorFlow在卷积和池化上有很强的灵活性。我们怎么处理边界?步长应该设多大?在这个实例里,我们会一直使用vanilla版本。”。那么什么是Vanilla版本?也就是最一般,最正常的版本。

"Vanilla" is a common euphemism for "regular" or "without any fancy stuff."


2. Dropout是什么


Dropout是为了解决大规模深度学习的两个缺点:费时,过拟合而发明的一种方法。Dropout就是在不同的训练过程中随机扔掉一部分神经元。

操作过程如下:

在一次训练中:每个神经元有p的概率被选中为有效,如果被选为无效神经元,那么这次训练过程中不更新权值,也不参加神经网络的计算。

在验证中:每个神经元都要参加运算,但其输出要乘以概率p。教程中有一句“TensorFlow的tf.nn.dropout操作除了可以屏蔽神经元的输出外,还会自动处理神经元输出值的scale。所以用dropout的时候可以不用考虑scale。”,这里的scale就是指输出时要乘的这个概率。

这一篇文章解释了什么是Dropout: http://blog.csdn.net/stdcoutzyx/article/details/49022443

3. 什么是ADAM优化器

TensorFlow这个例子里面最后用了Adam优化器,而不是用的GradientDescent,Adam也是一种基于梯度下降的方法。这一篇文章有比较详细的叙述:http://www.cnblogs.com/xinchrome/p/4964930.html

猜你喜欢

转载自blog.csdn.net/nxcxl88/article/details/52132763
今日推荐