深度学习与TensorFlow:理解卷积神经网络

在之前我们学习好搭建全连接神经网络后,今天让我们继续学习去搭建卷积神经网络,并且来使用mnist进行手写数字识别.

在我们使用的mnist数据集中,一张分辨率仅仅是 28x28 的黑白图像,就有近 40 万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。 待优化的参数过多,容易导致模型过拟合。为避免这种现象,实际应用中一 般不会将原始图片直接喂入全连接网络。

因此将图片进行多次特征提取,再把提取后的计算机可读特征喂给全连接 网络,这样看起来是一个很好的主意.

1:关于卷积

卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片 上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。

具体的计算过程如图中所示:

上面是 5x5x1 的灰度图片,1表示单通道,5x5表示分辨率,共有 5 行 5 列个灰度值。若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积,偏置项 b=1,则求卷积的计算是:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1(注意不要忘记加偏置 1)

输出图片边长=(输入图片边长–卷积核长+1)/步长,此图为:(5 – 3 + 1)/ 1 = 3,输出图片是 3x3 的分辨率,用了 1 个卷积核,输出深度是 1,最后输出的是 3x3x1 的图片。

2:全零填充 Padding

有时会在输入图片周围进行全零填充,这样可以保证输出图片的尺寸和输入 图片一致

如图中所示:

例:在前面 5x5x1 的图片周围进行全零填充,可使输出图片仍保持 5x5x1 的 维度。这个全零填充的过程叫做 padding。

输出数据体的尺寸=(W−F+2P)/S+1

例:输入是 7×7,滤波器是 3×3,步长为 1,填充为 0,那么就能得到一个 5×5 的输出。如果步长为 2,输出就是 3×3。

如果输入量是 32x32x3,核是 5x5x3,不用全零填充,输出是(32-5+1)/1=28, 如果要让输出量保持在 32x32x3,可以对该层加一个大小为 2 的零填充。可以根 据需求计算出需要填充几层零32=(32-5+2P)/1 +1,计算出 P=2,即需填充 2 层零。

3:池化

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) * (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 * 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

4:舍弃Dropout

在神经网络训练过程中,为了减少过多参数常使用 dropout 的方法,将一部 分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍 弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。比如 上面这张图,在训练时一些神经元不参加神经网络计算了。Dropout 可以有效减少过拟合。

dropout 一般会放到全连接网络中。在实际应用中,常常在前向传播构建神经网络时使用 dropout 来减小过拟合 加快模型的训练速度。

5:卷积NN

卷积NN的作用是借助卷积核(kernel)提取特征后,送入全连接网络.

卷积神经网络可以认为由两部分组成,一部分是对输入图片进行特征提取, 另一部分就是全连接网络,只不过喂入全连接网络的不再是原始图片,而是经过 若干次卷积、激活和池化后的特征信息。 卷积神经网络从诞生到现在,已经出现了许多经典网络结构,比如 Lenet-5、 Alenet、VGGNet、GoogleNet 和 ResNet 等。每一种网络结构都是以卷积、激活、 池化、全连接这四种操作为基础进行扩展。 Lenet-5 是最早出现的卷积神经网络,由 Lecun 团队首先提出,Lenet-5 有效 解决了手写数字的识别问题

Lenet 神经网络结构为:

①输入为 32*32*1 的图片大小,为单通道的输入;

②进行卷积,卷积核大小为 5*5*1,个数为 6,步长为 1,非全零填充模式;

③将卷积结果通过非线性激活函数;

④进行池化,池化大小为 2*2,步长为 1,全零填充模式;

⑤进行卷积,卷积核大小为 5*5*6,个数为 16,步长为 1,非全零填充模式;

⑥将卷积结果通过非线性激活函数;

⑦进行池化,池化大小为 2*2,步长为 1,全零填充模式;

⑧全连接层进行 10 分类。

Lenet 神经网络的结构图及特征提取过程如下所示:

Lenet 神经网络的输入是 32*32*1,经过 5*5*1 的卷积核,卷积核个数为 6 个, 采用非全零填充方式,步长为 1,根据非全零填充计算公式:输出尺寸=(输入 尺寸-卷积核尺寸+1)/步长=(32-5+1)/1=28.故经过卷积后输出为 28*28*6。 经过第一层池化层,池化大小为 2*2,全零填充,步长为 2,由全零填充计算公 式:输出尺寸=输入尺寸/步长=28/2=14,池化层不改变深度,深度仍为 6。用同 样计算方法,得到第二层池化后的输出为 5*5*16。将第二池化层后的输出拉直 送入全连接层。

根据 Lenet 神经网络的结构可得,Lenet 神经网络具有如下特点:

①卷积(Conv)、池化(ave-pooling)、非线性激活函数(sigmoid)相互交替;

②层与层之间稀疏连接,减少计算复杂度。

而我们下一篇文章,将会通过微调lenet网络,来让其适应mnist数据集,因此让我们来搭建我们自己的神经网络.

引用资料:

1;http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

2:北大课程<人工智能与TensorFlow>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张俊红

决策树详解

总第79篇 01|背景: 我们在日常生活中经常会遇到一些选择需要去做一些选择,比如我们在找工作的时候每个人都希望能找到一个好的工作,但是公司那么多,工作种类那么...

2915
来自专栏大数据挖掘DT机器学习

线性判别分析LDA(Linear Discriminant Analysis)

1. 问题 之前我们讨论的PCA、ICA也好,对样本数据来言,可以是没有类别标签y的。回想我们做回归时,如果特征太多,那么会产生不相关特征引入、过度拟...

3704
来自专栏SIGAI学习与实践平台

用一句话总结常用的机器学习算法

浓缩就是精华。想要把书写厚很容易,想要写薄却非常难。现在已经有这么多经典的机器学习算法,如果能抓住它们的核心本质,无论是对于理解还是对于记忆都有很大的帮助,还能...

803
来自专栏人工智能LeadAI

TensorFlow从0到1丨 第六篇:解锁梯度下降算法

上一篇 5 TF轻松搞定线性回归,知道了模型参数训练的方向是由梯度下降算法指导的,并使用了TF的封装tf.train.GradientDescentOptimi...

3009
来自专栏TensorFlow从0到N

TensorFlow从0到1 - 6 - 解锁梯度下降算法

上一篇 5 TF轻松搞定线性回归,我们知道了模型参数训练的方向是由梯度下降算法指导的,并使用TF的封装tf.train.GradientDescentOpti...

4086
来自专栏李智的专栏

斯坦福CS231n - CNN for Visual Recognition(5)-lecture5激活函数、神经网络结构

  在线性分类中,我们使用s=Wxs=Wx计算类别的评分函数,其中WW为一个矩阵,xx为一个列向量,输出表示类别的评分向量。而在神经网络中,最常用的是s=W2m...

671
来自专栏专知

【干货】机器学习中的五种回归模型及其优缺点

【导读】近日,机器学习工程师 George Seif 撰写了一篇探讨回归模型的不同方法以及其优缺点。回归是用于建模和分析变量之间关系的一种技术,常用来处理预测问...

3686
来自专栏红色石头的机器学习之路

Coursera吴恩达《优化深度神经网络》课程笔记(2)-- 优化算法

上节课我们主要介绍了如何建立一个实用的深度学习神经网络。包括Train/Dev/Test sets的比例选择,Bias和Variance的概念和区别:Bias对...

2130
来自专栏大数据挖掘DT机器学习

Python的机器学习实战:AadBoost

目录: 1. Boosting方法的简介 2. AdaBoost算法 3.基于单层决策树构建弱分类器 4.完整的AdaBoost的算法实现 5.总结 1. B...

2063
来自专栏机器学习算法与Python学习

收藏!机器学习与深度学习面试问题总结.....

1997

扫码关注云+社区