TensorFlow深度学习(8)

10、卷积神经网络

10.1全连接层的问题

在这里插入图片描述
那么 34 万个网络参数至少需要约 1.34MB 内存。也就是说,单就存储网络的参数就需要 1.34MB 内存,实际上,网络的训练过程中还需要缓存计算图模型、梯度信息、输入和中间计算结果等,其中梯度相关运算占用资源非常多。可见,全连接层较高的内存占用量严重限制了神经网络朝着更大规模、更深层数方向的发展。

10.1.1局部相关性

在这里插入图片描述
可以看出,网络层的每个输出节点都与所有的输入节点相连接,用于提取所有输入节点的特征信息,这种稠密的连接方式是全连接层参数量大、计算代价高的根本原因。

我们可以分析输入节点对输出节点的重要性分布,仅考虑较重要的一部分输入节点,而抛弃重要性较低的部分节点,这样输出节点只需要与部分输入节点相连接,那么问题就转变为探索 I 层输入节点对于𝑗号输出节点的重要性分布。
在这里插入图片描述
这种基于距离的重要性分布假设特性称为局部相关性,它只关注和自己距离较近的部分节点,而忽略距离较远的节点。在这种重要性分布假设下,全连接层的连接模式变成了输出节点𝑗只与以𝑗为中心的局部区域(感受野)相连接,与其它像素无连接。

10.1.2权值共享

每个输出节点仅与感受野区域内𝑘 × 𝑘个输入节点相连接,输出层节点数为‖𝐽‖,则当前层的参数量为𝑘 × 𝑘 × ‖𝐽‖,相对于全连接层的‖𝐼‖ × ‖𝐽‖,考虑到𝑘一般取值较小,如 1、 3、5 等,𝑘 × 𝑘 ≪ ‖𝐼‖,因此成功地将参数量减少了很多。

能否再将参数量进一步减少,比如只需要𝑘 × 𝑘个参数即可完成当前层的计算?
通过权值共享的思想,对于每个输出节点𝑜𝑗,均使用相同的权值矩阵𝑾,那么无论输出节点的数量‖𝐽‖是多少,网络层的参数量总是𝑘 × 𝑘。
在这里插入图片描述
在计算左上方和右下方感受野区域时,共享权值参数𝑾,即使用相同的权值参数𝑾相乘累加,得到左上方和右下角像素的输出值,此时网络层的参数量只有3 × 3 = 9个,且与输入、输出节点数无关。

通过运用局部相关性和权值共享的思想,我们成功把网络的参数量从‖𝐼‖ × ‖𝐽‖减少到𝑘 × 𝑘(准确地说,是在单输入通道、单卷积核的条件下)。这种共享权值的“局部连接层”网络其实就是卷积神经网络。

10.1.3卷积运算

对于窗口𝑘 × 𝑘内的所有像素,采用权值相乘累加的方式提取特征信息,每个输出节点提取对应感受野区域的特征信息。这种运算其实是信号处理领域的一种标准运算。

1D 连续卷积定义为:
在这里插入图片描述
此时的 2D 离散卷积定义为:
在这里插入图片描述
在这里插入图片描述
在深度学习中,函数𝑔(𝑚 𝑛)统一称为卷积核(Kernel),有时也叫 Filter、Weight 等。每次通过移动卷积核,并与图片对应位置处的感受野像素相乘累加,得到此位置的输出值。卷积核即是行、列为𝑘大小的权值矩阵𝑾,对应到特征图上大小为𝑘的窗口即为感受野,感受野与权值矩阵𝑾相乘累加,得到此位置的输出值。

卷积神经网络即是完成了 2D 函数的离散卷积运算;从局部相关与权值共享角度理解,也能得到一样的效果。

在计算机视觉领域,2D 卷积运算能够提取数据的有用特征,通过特定的卷积核与输入图片进行卷积运算,获得不同特征的输出图片,如下表 10.2 所示,列举了一些常见的卷积核及其效果样片。
在这里插入图片描述

10.2卷积神经网络

10.2.1单通道输入和单卷积核

在这里插入图片描述

10.2.2多通道输入和单卷积核

多通道输入的卷积层更为常见,比如彩色的图片包含了 R/G/B 三个通道,每个通道上面的像素值表示 R/G/B 色彩的强度。
在这里插入图片描述
一般来说,一个卷积核只能完成某种逻辑的特征提取,当需要同时提取多种逻辑特征时,可以通过增加多个卷积核来得到多种特征,提高神经网络的表达能力,这就是多通道输入、多卷积核的情况。

10.2.3多通道输入、多卷积核

输出的两个通道拼接在一起形成了最终输出𝑶。每个卷积核的大小𝑘、步长𝑠、填充设定等都是统一设置,这样才能保证输出的每个通道大小一致,从而满足拼接的条件。
在这里插入图片描述

10.2.4步长

感受野沿𝑥方向的步长为 2,表达为步长𝑠 = 2。
在这里插入图片描述

10.2.5填充

为了让输出𝑶的高宽能够与输入𝑿的相等,一般通过在原输入𝑿的高和宽维度上面进行填充(Padding)若干无效元素操作,得到增大的输入𝑿′。通过精心设计填充单元的数量,在𝑿′上面进行卷积运算得到输出𝑶的高宽可以和原输入𝑿相等,甚至更大。
在这里插入图片描述
卷积核的大小𝑘,步长𝑠,填充数𝑝(只考虑上下填充数量𝑝相同,左右填充数量𝑝𝑤相同的情况)以及输入𝑿的高宽ℎ/𝑤共同决定,它们之间的数学关系可以表达为:
在这里插入图片描述
在这里插入图片描述

10.3卷积层实现

10.3.1自定义权值

在 TensorFlow 中,通过 tf.nn.conv2d 函数可以方便地实现 2D 卷积运算。输入𝑿: [b,ℎ,𝑤,𝑐𝑖𝑛] 和卷积核𝑾:[𝑘,𝑘,𝑐𝑖𝑛,𝑐𝑜𝑢𝑡]进行卷积运算,得到输出𝑶:[b,ℎ′,𝑤′,𝑐𝑜𝑢𝑡]。
在这里插入图片描述
( 5+2*0-3)/1+1=3

padding 参数的设置格式为:padding=[[0,0],[上,下],[左,右],[0,0]]例如,上下左右各填充一个单位,则 padding 参数设置为
为[[0,0],[1,1],[1,1],[0,0]]。
通过设置参数 padding=‘SAME’、strides=1 可以直接得到输入、输出同大小的卷积层,其中 padding 的具体数量由 TensorFlow 自动计算并完成填充操作。
当𝑠 > 时,设置 padding='SAME’将使得输出高、宽将成1/𝑠倍地减少。

卷积神经网络层与全连接层一样,可以设置网络带偏置向量。tf.nn.conv2d 函数是没有实现偏置向量计算的,添加偏置只需要手动累加偏置张量即可。
在这里插入图片描述

10.3.2卷积层类

通过卷积层类 layers.Conv2D 可以不需要手动定义卷积核𝑾和偏置𝒃张量,直接调用类实例即可完成卷积层的前向计算,实现更加高层和快捷。

在新建卷积层类时,只需要指定卷积核数量参数 filters,卷积核大小 kernel_size,步长strides,填充 padding 等即可。
在这里插入图片描述
在类 Conv2D 中,保存了卷积核张量𝑾和偏置b:
在这里插入图片描述
也可以直接调用类实例 layer.kernel、layer.bias名访问𝑾和𝒃张量。

如果卷积核高宽不等,步长行列方向不等,此时需要将 kernel_size 参数设计为 tuple格式(𝑘 𝑘w),strides 参数设计为(𝑘 𝑘w)。如下创建 4 个3 × 4大小的卷积核,竖直方向移动步长𝑠 = 2,水平方向移动步长𝑠w = 1:
在这里插入图片描述

10.4LetNet-5实战

在这里插入图片描述
我们在 LeNet-5 的基础上进行了少许调整,使得它更容易在现代深度学习框架上实现。首先我们将输入𝑿形状由32 × 32调整为28 × 28,然后将 2 个下采样层实现为最大池化层(降低特征图的高、宽,后续会介绍),最后利用全连接层替换掉 Gaussian connections层。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,卷积层的参数量非常少,主要的参数量集中在全连接层。因此通过卷积神经网络可以显著降低网络参数量,同时增加网络深度。

我们新建交叉熵损失函数类(没错,损失函数也能使用类方式)用于处理分类任务,通过设定from_logits=True 标志位将 softmax 激活函数实现在损失函数中。
在这里插入图片描述
数据可视化:
在这里插入图片描述
在这里插入图片描述
在测试阶段,由于不需要记录梯度信息,代码一般不需要写在 with tf.GradientTape() as tape 环境中。
在这里插入图片描述
在这里插入图片描述
在数据集上面循环训练 50 个 Epoch 后,网络的训练准确度达到了 97.3%,测试准确度也达到了 97.2%。对于非常简单的手写数字图片识别任务,古老的 LeNet-5 网络已经可以取得很好的效果,但是稍复杂一点的任务,比如彩色动物图片识别,LeNet-5 性能就会急剧下降。

本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。 基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。 本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。 通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。 本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。 本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页