人工智能导论助教的Tensorflow笔记 (5).pdf
《人工智能导论助教的Tensorflow笔记 (5).pdf》由会员分享,可在线阅读,更多相关《人工智能导论助教的Tensorflow笔记 (5).pdf(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、TensorflowTensorflow 笔记:第笔记:第七七讲讲 卷积神经网络卷积神经网络 本节目标:本节目标:学会使用学会使用 CNNCNN 实现对手写数字的识别。实现对手写数字的识别。 7.17.1 全连接全连接 NNNN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是 特征,输出为预测的结果。特征,输出为预测的结果。 参数个数:(前层 后层 + 后层) 一张分辨率仅仅是 28x28 的黑白图像,就有近 40 万个待优化的参数。现实 生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。 待优化的参数过多,待优化的
2、参数过多,容易导致模型过拟合。容易导致模型过拟合。为避免这种现象,实际应用中一 般不会将原始图片直接喂入全连接网络。 在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接 网络,再让全连接网络计算出分类评估值。网络,再让全连接网络计算出分类评估值。 例:先将此图进行多次特征提取,再把提取后的计算机可读特征喂给全连接 网络。 卷积卷积 Convolutional 卷积是一种有效提取图片特征的方法卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片一般用一个正方形卷积核,遍历图片 上的每一个像素点。图片与
3、卷积上的每一个像素点。图片与卷积核核重合区域内重合区域内相对应的每一个像素值相对应的每一个像素值乘卷积核乘卷积核 内相对应点的权重,然后求和,内相对应点的权重,然后求和,再再加上偏置后,最后得到输出图片中的一个像加上偏置后,最后得到输出图片中的一个像 素值。素值。 例:上面是 5x5x1 的灰度图片,1 表示单通道,5x5 表示分辨率,共有 5 行 5 列个灰度值。若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积,偏置项 b=1, 则求卷积的计算是: (-1)x1+0 x0+1x2+(-1)x5+0 x4+1x2+(-1)x3+0 x4+1x5+1=1 (注 意不要忘记加偏置
4、 1) 。 输出图片边长=(输入图片边长卷积核长+1)/步长,此图为: (5 3 + 1)/ 1 = 3,输出图片是 3x3 的分辨率,用了 1 个卷积核,输出深度是 1,最后输出的是 3x3x1 的图片。 全零填充全零填充 P Padding adding 有时会在输入图片周围进行全零填充, 这样可以保证输出图片的尺寸和输入有时会在输入图片周围进行全零填充, 这样可以保证输出图片的尺寸和输入 图片一致。图片一致。 例:在前面 5x5x1 的图片周围进行全零填充,可使输出图片仍保持 5x5x1 的 维度。这个全零填充的过程叫做 padding。 输出数据体的尺寸=(W F+2P)/S+1 W:
5、输入数据体尺寸,F:卷积层中神经元感知域,S:步长,P:零填充的数 量。 例:输入是 77,滤波器是 33,步长为 1,填充为 0,那么就能得到一个 55 的输出。如果步长为 2,输出就是 33。 如果输入量是 32x32x3, 核是 5x5x3, 不用全零填充, 输出是 (32-5+1) /1=28, 如果要让输出量保持在 32x32x3,可以对该层加一个大小为 2 的零填充。可以根 据需求计算出需要填充几层零。32=(32-5+2P)/1 +1,计算出 P=2,即需填充 2 层零。 使用使用 padding 和不使用和不使用 padding 的输出维度的输出维度 上一行公式是使用 padd
6、ing 的输出图片边长,下一行公式是不使用 padding 的输出图片边长。公式如果不能整除,需要向上取整数。如果用全零填充,也就 是 padding=SAME。如果不用全零填充,也就是 padding=VALID。 Tensorflow 给出的计算卷积的函数给出的计算卷积的函数 函数中要给出四个信息:对输入图片的描述、对卷积核的描述、对卷积核函数中要给出四个信息:对输入图片的描述、对卷积核的描述、对卷积核 滑动步长的描述以及是否使用滑动步长的描述以及是否使用 padding。 1)对输入图片的描述:对输入图片的描述:用 batch 给出一次喂入多少张图片,每张图片的分 辨率大小,比如 5 行
7、 5 列,以及这些图片包含几个通道的信息,如果是灰度图 则为单通道,参数写 1,如果是彩色图则为红绿蓝三通道,参数写 3。 2)对卷积核的描述:对卷积核的描述:要给出卷积核的行分辨率和列分辨率、通道数以及用 了几个卷积核。比如上图描述,表示卷积核行列分辨率分别为 3 行和 3 列,且是 1 通道的,一共有 16 个这样的卷积核,卷积核的通道数是由输入图片的通道数 决定的,卷积核的通道数等于输入图片的通道数,所以卷积核的通道数也是 1。 一共有 16 个这样的卷积核,说明卷积操作后输出图片的深度是 16,也就是输出 为 16 通道。 3)对卷积核滑动步长的描述:)对卷积核滑动步长的描述:上图第二
8、个参数表示横向滑动步长,第三个 参数表示纵向滑动步长。第一个 1 和最后一个 1 这里固定的。这句表示横向纵向 都以 1 为步长。 4) 是否使用) 是否使用padding: 用的是VALID。 注意这里是以字符串的形式给出VALID。 对多通道的图片求卷积对多通道的图片求卷积 多数情况下,输入的图片是 RGB 三个颜色组成的彩色图,输入的图片包含了 红、 绿、 蓝三层数据, 卷积核的深度应该等于输入图片的通道数, 所以使用 3x3x3 的卷积核,最后一个 3 表示匹配输入图像的 3 个通道,这样这个卷积核有三层, 每层会随机生成 9 个待优化的参数,一共有 27 个待优化参数 w 和一个偏置
9、 b。 对于彩色图,按层分解开,可以直观表示为上面这张图,三个颜色分量:红红 色分量、绿色分量和蓝色分量色分量、绿色分量和蓝色分量。 卷积计算方法和单层卷积核相似,卷积核为了匹配红绿蓝三个颜色,把三层 的卷积核套在三层的彩色图片上,重合的 27 个像素进行对应点的乘加运算,最 后的结果再加上偏置项 b,求得输出图片中的一个值。 这个 5x5x3 的输入图片加了全零填充, 使用 3x3x3 的卷积核, 所有 27 个点与 对应的待优化参数相乘,乘积求和再加上偏置 b 得到输出图片中的一个值 6。 针对上面这幅彩色图片,用 conv2d 函数实现可以表示为: 一次输入 batch 张图片,输入图片
10、的分辨率是 5x5,是 3 通道的,卷积核是 3x3x3,一共有 16 个卷积核,这样输出的深度就是 16,核滑动横向步长是 1,纵 向步长也是 1,padding 选择 same,保证输出是 5x5 分辨率。由于一共用了 16 个卷积核,所以输出图片是 5x5x16。 池化池化 Pooling Tensorflow 给出了计算池化的函数。最大池化用最大池化用 tf.nn.max_pool 函数,平均函数,平均 池化用池化用 tf.nn.avg_pool 函数。函数。 函数中要给出四个信息,对输入的描述、对池化核的描述、对池化核滑动步函数中要给出四个信息,对输入的描述、对池化核的描述、对池化核
11、滑动步 长的描述和是否使用长的描述和是否使用 padding。 1)对输入的描述:)对输入的描述:给出一次输入 batch 张图片、行列分辨率、输入通道的个 数。 2)对池化核的描述:对池化核的描述:只描述行分辨率和列分辨率,第一个和最后一个参数 固定是 1。 3)对池化核滑动步长的描述:)对池化核滑动步长的描述:只描述横向滑动步长和纵向滑动步长,第一 个和最后一个参数固定是 1。 4)是否使用)是否使用 padding:padding 可以是使用零填充 SAME 或者不使用零填充 VALID。 舍弃舍弃 Dropout 在神经网络训练过程中,为了减少过多参数常使用 dropout 的方法,将
12、一部 分神经元按照一定概率从神经网络中舍弃。这种舍弃是临时性的,仅在训练时舍 弃一些神经元;在使用神经网络时,会把所有的神经元恢复到神经网络中。比如 上面这张图,在训练时一些神经元不参加神经网络计算了。Dropout 可以有效减可以有效减 少过拟合。少过拟合。 Tensorflow 提供提供的的 dropout 的函数的函数:用 tf.nn.dropout 函数。第一个参数链接 上一层的输出,第二个参数给出神经元舍弃的概率。 在实际应用中在实际应用中,常常在前向传播构建神经网络时使用常常在前向传播构建神经网络时使用 dropout 来减小过拟合来减小过拟合 加快模型的训练速度加快模型的训练速度
13、。 dropout 一般会放到全连接网络中一般会放到全连接网络中。如果在训练参数的过程中,输出 =tf.nn.dropout(上层输出,暂时舍弃神经元的概率) ,这样就有指定概率的神经 元被随机置零,置零的神经元不参加当前轮的参数优化。 卷积卷积 NN:借助卷积核(:借助卷积核(kernel)提取特征后,送入全连接网络。)提取特征后,送入全连接网络。 卷积神经网络可以认为由两部分组成,一部分是对输入图片进行特征提取, 另一部分就是全连接网络,只不过喂入全连接网络的不再是原始图片,而是经过 若干次卷积、激活和池化后的特征信息。 卷积神经网络从诞生到现在,已经出现了许多经典网络结构,比如 Lene
14、t-5、 Alenet、VGGNet、GoogleNet 和 ResNet 等。每一种网络结构都是以卷积、激活、 池化、全连接这四种操作为基础进行扩展。 Lenet-5 是最早出现的卷积神经网络,由 Lecun 团队首先提出,Lenet-5 有效 解决了手写数字的识别问题。 7.27.2 Lenet 神经网络是 Yann LeCun 等人在 1998 年提出的,该神经网络充分考虑图像 的相关性。 L Lenetenet 神经网络结构为:神经网络结构为: 输入为输入为 32*32*132*32*1 的图片大小,为单通道的输入;的图片大小,为单通道的输入; 进行卷积,卷积核大小为进行卷积,卷积核大
15、小为 5*5*15*5*1,个数为,个数为 6 6,步长为,步长为 1 1,非全零填充模式;,非全零填充模式; 将卷积结果通过非线性激活函数;将卷积结果通过非线性激活函数; 进行池化,池化大小为进行池化,池化大小为 2*22*2,步长为,步长为 1 1,全零填充模式;,全零填充模式; 进行卷积,卷积核大小为进行卷积,卷积核大小为 5*5*65*5*6,个数为,个数为 1616,步长为,步长为 1 1,非全零填充模式;,非全零填充模式; 将卷积结果通过非线性激活函数;将卷积结果通过非线性激活函数; 进行池化,池化大小为进行池化,池化大小为 2*22*2,步长为,步长为 1 1,全零填充模式;,全
16、零填充模式; 全连接层进行全连接层进行 1010 分类。分类。 Lenet 神经网络的结构图及特征提取过程如下所示: 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。用同 样计算方法,得到第二层池
17、化后的输出为 5*5*16。将第二池化层后的输出拉直 送入全连接层。 根据根据 LenetLenet 神经网络的结构可神经网络的结构可得,得,LenetLenet 神经网络具有如下特点:神经网络具有如下特点: 卷积(卷积(ConvConv) 、池化() 、池化(aveave- -poolingpooling) 、非线性激活函数() 、非线性激活函数(sigmoidsigmoid)相互交替;相互交替; 层与层之间稀疏连接层与层之间稀疏连接,减少计算复杂度减少计算复杂度。 对对 LenetLenet 神经网络进行微调神经网络进行微调,使其适应,使其适应 M Mnistnist 数据集数据集: 由于
18、 Mnist 数据集中图片大小为 28*28*1 的灰度图片, 而 Lenet 神经网络的输入 为 32*32*1,故需要对 Lenet 神经网络进行微调。 输入为 28*28*1 的图片大小,为单通道的输入; 进行卷积,卷积核大小为 5*5*1,个数为 32,步长为 1,全零填充模式; 将卷积结果通过非线性激活函数; 进行池化,池化大小为 2*2,步长为 2,全零填充模式; 进行卷积,卷积核大小为 5*5*32,个数为 64,步长为 1,全零填充模式; 将卷积结果通过非线性激活函数; 进行池化,池化大小为 2*2,步长为 2,全零填充模式; 全连接层,进行 10 分类。 Lenet 进行微调
19、后的结构如下所示: LenetLenet 神经网络在神经网络在 M Mnistnist 数据集上的实现,主要分为三个部分:前向传播过程数据集上的实现,主要分为三个部分:前向传播过程 (m mnist_nist_lenetlenet5_forward.py5_forward.py) 、反向传播过程() 、反向传播过程(m mnist_nist_lenetlenet5_backword.py5_backword.py) 、) 、 测试过程(测试过程(m mnist_nist_lenetlenet5_test.py5_test.py) 。) 。 第一,前向传播过程(mnist_lenet5_forw
20、ard.py)实现对网络中参数和偏置的 初始化、定义卷积结构和池化结构、定义前向传播过程。具体代码如下所示: 注释: 1 1)定义前向传播过程中常用到的参数。)定义前向传播过程中常用到的参数。 图片大小即每张图片分辨率为 28*28,故 IMAGE_SIZE 取值为 28;Mnist 数据集 为灰度图,故输入图片通道数 NUM_CHANNELS 取值为 1;第一层卷积核大小为 5, 卷积核个数为 32,故 CONV1_SIZE 取值为 5,CONV1_KERNEL_NUM 取值为 32;第二 层卷积核大小为 5, 卷积核个数为 64, 故 CONV2_SIZE 取值为 5, CONV2_KER
21、NEL_NUM 为 64;全连接层第一层为 512 个神经元,全连接层第二层为 10 个神经元,故 FC_SIZE 取值为 512,OUTPUT_NODE 取值为 10,实现 10 分类输出。 2 2)把前向传播过程中,常用到的方法定义为函数,方便调用。)把前向传播过程中,常用到的方法定义为函数,方便调用。 在 mnist_lenet5_forward.py 文件中,定义四个常用函数:权重 w 生成函数、偏 置 b 生成函数、卷积层计算函数、最大池化层计算函数,其中,权重 w 生成函数 和偏置 b 生成函数与之前的定义相同。 卷积层计算函数描述如下:卷积层计算函数描述如下: t tf.nn.c
22、onv2d(f.nn.conv2d(输入描述输入描述 batch,batch,行分辨率行分辨率, ,列分辨率列分辨率, ,通道数通道数 , 卷积核描述卷积核描述 行分辨率行分辨率, ,列分辨率列分辨率, ,通道数通道数, ,卷积核个数卷积核个数 , 核滑动步长核滑动步长11, ,行步长行步长, ,列步长列步长, ,11, 填充模式填充模式 p padding)adding) 例如: tf.nn.conv2d(x=100,28,28,1, w=5,5,1,6, strides=1,1,1,1, padding=SAME) 本例表示卷积输入 x 为 28*28*1,一个 batch_size 为
23、100,卷积核大小为 5*5, 卷积核个数为 6, 垂直方向步长为 1, 水平方向步长为 1, 填充方式为全零填充。 最大池化层计算函数描述如下:最大池化层计算函数描述如下: tftf.nn.max_pool(.nn.max_pool(输入描述输入描述 batch,batch,行分辨率,列分辨率,通道数行分辨率,列分辨率,通道数 , 池化核描述池化核描述1,1,行分辨率行分辨率, ,列分辨率列分辨率,1,1 , 池化核滑动步长池化核滑动步长11, ,行步长行步长, ,列步长列步长, ,11, 填充模式填充模式 p padding)adding) 例如: tf.nn.max_pool(x=100
24、,28,28,1,ksize=1, 2, 2, 1, strides=1, 2, 2, 1, padding=SAME) 本例表示卷积输入 x 为 28*28*1, 一个 batch_size 为 100, 池化核大小用 ksize, 第一维和第四维都为 1,池化核大小为 2*2,垂直方向步长为 1,水平方向步长 为 1,填充方式为全零填充。 3 3)定义前向传播过程)定义前向传播过程 实现第一层卷积实现第一层卷积 conv1_w =get_weight(CONV1_SIZE,CONV1_SIZE,NUM_CHANNELS, CONV1_KERNEL_NUM,regularizer) conv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能导论助教的Tensorflow笔记 5 人工智能 导论 助教 Tensorflow 笔记
限制150内