版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深度学习:从入门到精通(微课版)陪伴中国数据产业一起成长第一章深度学习简介及TensorFlow安装修改版本.pptx第二章神经网络基础.pptx第三章神经网络的TensorFlow实现.pptx第四章卷积神经网络基础.pptx第五章经典卷积神经网络(上).pptx第六章经典卷积神经网络(下).pptx第七章深度学习用于文本序列.pptx第一章:
深度学习简介及TensorFlow安装陪伴中国数据产业一起成长主讲人:学习目标1.深度学习的基本概念2.深度学习与人工智能、机器学习、回归分析之间的联系与区别3.深度学习的开发环境,TensorFlow和Keras编程框架4.深度学习的发展历程5.深度学习擅长的领域机器学习、深度学习与人工智能PART1.11.1.1机器学习机器学习(MachineLearning)是指如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以从经验中学习。这一定义由卡内基梅隆大学(CarnegieMellonUniversity)的汤姆·迈克尔·米切尔(TomMichaelMitchell)教授在其1997年出版的《MachineLearning(机器学习)》一书中提出。机器学习的分类监督学习(SupervisedLearning)是指从已标注的训练数据中学习判断数据特征,并将其用于对未标注数据的判断的一种方法。无监督学习(UnsupervisedLearning)不同于监督学习,它的学习算法是从没有标注的训练数据中学习数据的特征。1.1.2深度学习深度学习(DeepLearning)是一个复杂的机器学习算法,它的概念源于人工神经网络的研究,强调从连续的层(Layer)中学习。其中“深度”在某种意义上是指神经网络的层数,而“学习”是指训练神经网络的过程。深度学习与机器学习的区别二者提取特征的方式不同:深度学习具备自动提取抽象特征的能力,机器学习大多是手动选取特征和构造特征。1.1.3机器学习、深度学习与人工智能的关系人工智能(ArtificialIntelligence,AI)是一个主要研究如何制造智能机器或智能系统,借以模拟人类的智能活动,从而延伸人类智能的科学。人工智能、机器学习和深度学习之间的关系可以用下图说明。深度学习与回归分析PART1.21.2.1回归分析理论框架
1.2.2深度学习与回归分析的关系
通过人脸猜测年龄和性别图像以像素的形式存储,像素越多,图像包含的信息越多,也就越清晰。这是一个1
024像素×1
024像素×3的原图,说明这张图像由3个1
048
576像素的矩阵组成,每个像素矩阵以1
024行1
024列的形式排列。
深度学习发展历程PART1.31.3深度学习的发展历程第一阶段:萌芽期(20世纪40年代~80年代)1943年,美国神经生理学家沃伦·麦卡洛克(WarrenMcCulloch)和数学家沃尔特·皮兹(WalterPitts)通过对生物神经元建模,首次提出了人工神经元模型,该模型被称为M-P模型。第二阶段:发展期(20世纪90年~2011年)20世纪80年代,罗森•布拉特提出的适用多层感知机的反向传播算法(BackPropagation,BP)解决了线性不可分问题,引起了神经网络的第二次热潮。BP算法的提出使得神经网络的训练变得简单可行。到了1989年,被称为卷积神经网络之父的杨立昆(YannLeCun)利用BP算法训练多层神经网络并将其用于识别手写邮政编码,这个工作可以认为是卷积神经网络(ConvolutionalNeuralNetwork,CNN)的开山之作。第三阶段:爆发期(2011年至今)2012年Hinton课题组构建了AlexNet。2014年,由牛津大学VGG(VisualGeometryGroup)提出的VGG-Net获得ImageNet竞赛定位任务的第一名和分类任务的第二名,同年分类任务的第一名则是被Google的Inception网络夺得。2015年,ResNet横空出世,在ILSVRC和COCO大赛上获得冠军。2017年,Google提出的移动端模型MobileNet以及CVPR2017的DenseNet模型在模型复杂度以及预测精度上又做了很多贡献。1.3深度学习的发展历程深度学习擅长的领域PART1.41.4深度学习擅长的领域图像处理(ImageProcessing):用计算机对图像进行分析,以达到所需结果的技术。图像分类目标检测图像分割语音识别:让机器通过识别和理解语音信号,将语音转换为相应的文本或命令的技术。自然语言处理:让计算机具备处理、理解和运用人类语言的能力。文本分类情感分析机器翻译棋牌竞技:视频处理:在计算机上播放和录制视频后,将家庭电影复制到计算机,然后使用视频和音频剪辑工具进行编辑、剪辑,增加一些很普通的特效效果,使视频的观赏性增强的技术。1.4深度学习擅长的领域图像处理-目标检测图像处理-图像分割图像处理-风格迁移语音识别安装TensorFlowPART1.51.5深度学习擅长的领域TensorFlow由Google开发并开源,是一个采用计算图(ComputationalGraphs)来计算数值的开源软件库,它也是目前使用最广泛的实现机器学习及其他涉及大量数学运算的算法库之一。Keras则是现在非常流行的深度学习模型开发框架,是用Python编写的,语法简洁,封装程度高,只需十几行代码就可以构建一个深度神经网络,其中Keras大部分功能已经并入Tensorflow框架中。硬件环境准备使用CPU训练使用GPU训练使用云端GPU训练(推荐)软件环境准备:TensorFlow最简便的安装方法是使用Anaconda,接下来将默认使用Anaconda作为TensorFlow的Python环境1.5安装TensorFlow在Anaconda环境下,安装TensorFlow及Keras软件包,步骤如下:在命令行输入condainstalltensorflow-gpu(或者condainstalltensorflow),其中,输入tensorflow-gpu会自动安装CUDA等GPU依赖验证是否正确安装环境并可以使用GPU加速计算。在命令行输入python,并输入以下测试语句。下面通过一段简单的Python代码演示如何使用TensorFlow。安装Keras(用来快速创建深度学习模型的Python类库)只需在命令行输入:1.5安装TensorFlow使用JupyterNotebook运行深度学习JupyterNotebook是一款基于网页的用于交互计算的应用程序,可应用于全过程计算:开发、文档编写、运行代码和展示结果。启动方法:Anaconda直接启动在服务器终端输入以下命令启动JupyterNotebook网页版:jupyternotebook网页启动界面课后习题通过对本章的学习,你认为深度学习崛起的原因有哪些?深度学习与机器学习的区别是什么?除了本章提到的深度学习擅长的领域,请查阅相关资料,了解深度学习还在哪些领域见长。尝试在ubuntu系统环境中安装TensorFlow和Keras。编写一段Python代码用于计算两个矩阵相加。对于本章的观点:深度学习可以看成是一种高度复杂的非线性回归,你是如何理解的?可否举1~2个生活中的例子加以说明?狗熊会THANKYOU狗熊会|聚数据英才,助产业振兴第二章:
神经网络基础陪伴中国数据产业一起成长主讲人:周静学习目标1.M-P神经元模型、感知机模型和多层感知机模型的结构;2.sigmoid、tanh和ReLU激活函数的定义与区别;3.反向传播算法的原理;4.神经网络过拟合的处理方法。神经网络模型PART2.12.1.1
M-P神经元模型M-P神经元模型是首个模拟生物神经元的结构和工作原理构造出来的一个抽象和简化了的数学模型。它由心理学家沃伦·麦卡洛克(WarrenMcCulloch)和数理逻辑学家沃尔特·皮兹(WalterPitts)在1943年提出并以二人的名字命名。该模型旨在模拟从多输入到单输出的信息处理单元。M-P模型的工作步骤:神经元接受n个输入信号。将输入与权值参数进行加权求和并经过激活函数激活。将激活结果作为结果输出。人为设定参数值
2.1.2感知机模型感知机(Perceptron)模型是由美国心理学家弗兰克·罗森布拉特(FrankRosenblatt)于1957年提出的一种具有单层计算单元的神经网络。旨在建立一个线性超平面用来解决线性可分问题。对样本数据的训练自动获得对参数的更新结果。感知机学习机制:准备训练样本和对权值参数进行初始化加入一个训练样本,并计算实际输出值比较实际输出值和期望输出值的大小,如果相同,则参数不变;如果不同,则需要通过误差修正调整参数大小对每个训练样本重复上述步骤,直到计算的误差为0或者小于某个指定的值单层感知机结构2.1.2感知机模型
2.1.3多层感知机模型多层感知机模型(MultilayerPerceptron,MLP),就是在输入层和输出层之间加入了若干隐藏层,以形成能够将样本正确分类的凸域,使得神经网络对非线性情况的拟合程度大大增强。层数计算:不计输入层,把除去输入层之后的神经网络从左至右依次计数得到的总层数,就是神经网络的最终层数。如上图层数为2。上图网络又称为全连接神经网络。全连接是指神经网络模型中,相邻两层单元之间的连接方式,使用全连接方式时,网络当前层的单元与网络上一层的每个单元都存在连接。具有一个单隐层的多层感知机模型的拓扑结构激活函数PART2.22.2激活函数激活函数就是指非线性变换。对线性组合的结果施加一个非线性变换,就为神经网络各层之间的连接方式提供了一种非线性的变换方式,而非线性变换打破了“线性组合的线性组合”这样一种循环,多层神经网络相比于单层网络有了更丰富的函数形式。
常用的激活函数:sigmoid激活函数tanh激活函数ReLu激活函数其他激活函数:leakyReLU、elu、cReLU、selu、ReLU6、softplus、softsign……2.2.1
sigmoid激活函数TensorFlow实现:tf.nn.sigmoid(=None)原函数导数2.2.2
tanh激活函数TensorFlow实现:tf.nn.tanh(=None)原函数导数2.2.3
ReLu激活函数TensorFlow实现:tf.nn.relu(=None)原函数导数相比于sigmoid函数和tanh函数,ReLU函数被证明可以提供更好的结果神经网络的训练PART2.32.3.1神经网络的训练流程初始化参数。常用的初始化方法有常数初始化、正态分布类初始化、均匀分布类初始化等。切分batch数据。神经网络每一轮训练不是用全部数据,而是选取一定量的数据样本作为输入,这部分数据样本称为一个batch。前向传播(2.3.2)建立损失函数(2.3.3)反向传播(2.3.7)是否达到迭代次数,如果达到,则结束本轮训练,如果未达到,则继续重复前面的步骤进行新一轮迭代。2.3.2前向传播算法前向传播(ForwardPropagation)算法是指神经网络向前计算的过程。前向传播算法需要神经网络的输入,神经网络的连接结构以及每个神经元中的参数。介绍一个全连接神经网络前向传播例子:两层神经网络前向传播示意图2.3.3损失函数
2.3.4基于梯度下降算法的预备知识
2.3.4基于梯度下降算法的预备知识2.3.5批量梯度下降算法小批量梯度下降(Mini-BatchGradientDescent,MBGD)批量梯度下降算法就是把整个样本切分为若干份,每一份称为一个小批量(Mini-batch),然后在每一份样本上实施梯度下降算法进行参数更新随机梯度下降算法(StochasticGradientDescent,SGD)随机梯度下降算法是指每个批量只有一个样本,并且只在这一个样本上实施梯度下降算法进行参数更新。训练更灵活,但很难收敛,效率低。MBGD与SGD下降过程会产生震荡,SGD震荡严重批量数(BatchSize)的选择依实际情况而定2.3.6批量梯度下降算法的改进动量梯度下降(GradientDescentwithMomentum)算法均方根加速(RootMeanSquareProp,RMSProp)算法2.3.6批量梯度下降算法的改进自适应矩估计(AdaptiveMomentEstimation,Adam)算法Adam算法的优点:在同等数据量的情况下,占用内存更少,超参数相对固定,适用于大规模训练数据的场景,对梯度稀疏和梯度噪声有很大的容忍性。2.3.7反向传播算法
2.3.7反向传播算法反向传播算法示例(接上页):前向传播损失函数反向传播计算总误差隐含层→输出层的权值更新:输入层→隐含层的权值更新:神经网络的过拟合及处理方法PART2.42.4.1过拟合欠拟合正常拟合过拟合过拟合(Overfitting)是指在模型训练过程中,模型对训练数据学习过度,将数据中包含的噪声和误差也学习了,使得模型在训练集上表现很好,而在测试集上表现很差的现象。过拟合会使模型的预测精度降低,因此在实际训练时要防止过拟合现象产生2.4.2正则化方法
2.4.2正则化方法2.4.3
Dropout方法Dropout方法由辛顿(Hinton)教授团队提出,它是指在神经网络训练的过程中,将某一层的单元(不包括输出层的单元)数据随机丢弃一部分。目的:简化神经网络结构,防止神经网络过拟合原理:对每一层的神经元,设定一个失活(Drop)概率带dropout的神经网络带dropout的神经网络模型的分类效果课后习题课后习题多层感知机的原理是什么?一个神经网络的基本构成有哪些?常见的激活函数有哪些?它们的优缺点是什么?根据反向传播算法,请推导隐含层到输出层的偏置(即)的更新,以及输入层到隐含层偏置的更新。结合实际例子,谈谈你对几种梯度下降算法的理解。结合本章内容,谈谈你对神经网络中过拟合现象的理解,遇到过拟合,通常可以采取哪些技术手段进行处理?狗熊会THANKYOU狗熊会|聚数据英才,助产业振兴第三章:
神经网络的TensorFlow实现陪伴中国数据产业一起成长主讲人:周静学习目标1.张量的概念及其运算;2.图像数据的处理技巧;3.线性回归模型的TensorFlow实现;4.逻辑回归模型的TensorFlow实现。神经网络的数据结构PART3.13.1.1张量及其分类
张量分类Python示例张量维度(np.dim)标量np.array(888)0向量np.array([1,2,3,4,5])1矩阵np.array([[1,2,3,4],[5,6,7,8],[9,6,7,4]])23D张量np.array([[[12,4,6,8,23],[45,1,2,6,67]],[[32,7,3,5,14],[56,1,2,8,18]],[[23,7,2,5,78],[14,2,7,2,15]]])3更高维张量…>=33.1.2张量数据示例张量分类维度示例存储形状矩阵2向量数据(Samples,Features)3D张量3时间序列数据(Samples,Timespans,Features)4D张量4图像数据(Samples,Height,Width,Channels)彩色图像:通道数为3灰色图像:通道数为1图像数据的运算PART3.23.2.1图像数据的读入与展示步骤:读入图像改变大小:将图像统一为128像素×128像素大小矩阵转换:图像数据→(128,128,3)张量尺度变化:将像素矩阵每个元素变为0~1图像展示3.2.2图像数据的代数运算图像的加、减、乘、除运算线性回归模型的TensorFlow实现PART3.33.3.1线性回归模型
3.3.2案例:美食图像评分
3.3.2案例:美食图像评分
3.3.2案例:美食图像评分
3.3.2案例:美食图像评分
3.3.2案例:美食图像评分
输入层输出层图像数据X评分YFlatten()拉直全连接Dense()无激活函数3.3.2案例:美食图像评分
3.3.2案例:美食图像评分
batch_size():把所有样本随机排序后切成100个batch3.3.2案例:美食图像评分
逻辑回归模型的TensorFlow实现PART3.43.4.1逻辑回归模型
3.4.2
Softmax回归模型
3.4.3案例:手写数字识别数据集介绍:MNIST数据集——来自美国国家标准与技术研究所。训练集(TrainingSet)由250个不同的人手写的数字构成,其中50%是高中学生,50%来自人口普查局(TheCensusBureau)的工作人员。测试集(TestingSet)也是同样比例的手写数字数据。该案例的目的是区分0~9这10个数字。建模步骤:导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合参数估计结果可视化
3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量:使用函数to_categorical将因变量Y0处理成one-hot编码形式。逻辑回归模型的构建模型编译模型拟合参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建利用keras库实现模型编译模型拟合参数估计结果可视化输入层输出层图像数据X评分Ya.全连接Dense()b.激活函数:softmax()3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译损失函数为对数似然函数监控的目标为精度,设置metrics=accuracy模型拟合参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合:model.fit()参数估计结果可视化3.4.3案例:手写数字识别导入MNIST数据准备训练数据与测试数据手写数字展示产生one-hot型因变量逻辑回归模型的构建模型编译模型拟合参数估计结果可视化查看参数估计结果model.layersmodel.layers[1].get_weights()model.layers[1].get_weights()[0].shape课后习题课后习题请在实际生活中,找到3种基于图像的有趣应用,并梳理出其中的自变量和因变量。结合3.3.2小节的美食图像评分案例,你还能想到哪些其它的X并将其放在模型中,建立一个新的线性回归模型,并与书中模型的精度进行对比。除了图像这种非结构化的变量,你还遇到过哪些其它非结构化变量?请举例说明。对于3.4节的逻辑回归模型,能否对代码提出改进意见,并实现更好地预测精度?请思考还有哪些多分类问题可以被规范成逻辑回归并可以在TensorFlow的框架下实现?狗熊会THANKYOU狗熊会|聚数据英才,助产业振兴第四章:
卷积神经网络基础陪伴中国数据产业一起成长主讲人:周静学习目标1.卷积神经网络的基本结构;2.卷积的概念、分类、原理,TensorFlow实现和相关性质;3.池化的概念、分类、原理与TensorFlow实现。卷积神经网络的基本结构PART4.14.1卷积神经网络卷积神经网络又称卷积网络(ConvolutionalNetwork),是在图像处理和计算机视觉领域应用较为广泛的一种神经网络。基本结构:输入层卷积层:获得更多图像的抽象特征。池化层:减少网络中参数。全连接层:为后续分类任务做准备。输出层卷积与池化的通俗理解PART4.24.2.1对卷积的理解示例任务:分辨照片是否是熊大机械化过程:需要记录熊大特征的照片,记为“卷积核”;用“卷积核”扫描身份证,寻找是否有某个位置出现熊大的特征;将卷积核与身份证上某个位置的图像特征进行相似度计算,这个计算就是“卷积”。4.2.2对池化的理解熊大图像是否出现在身份证上,只依赖于计算出的相似特征的最大值,即只需要有一个局部图像与熊大照片非常相像,就可以认为身份证上出现了熊大头像。卷积核在图像上不断扫描的过程中,我们只关心卷积计算结果的最大值,这个最大化的操作,就是一种特殊的池化方法,被称为最大值池化(Max-Pooling)。卷积就是计算某种局部的相似性,而池化就是将某种最突出的相似性选择出来。卷积PART4.34.3卷积卷积(Convolutional)是一种特殊的线性运算,用来代替一般的矩阵乘法运算。卷积运算由以下两个关键参数定义:卷积核的大小输出特征图的深度:由使用的卷积核的数量决定卷积计算示例图4.3.1卷积运算原理
又称为卷积核或滤波器4.3.1卷积运算原理
4.3.1卷积运算原理full卷积在实际应用当中有意义未知,它可能对有些数据有效,对有些数据无效计算结果TensorFlow代码实现
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=True,data_format=“NHWC”,dilations=[1,1,1,1],name=None)输入张量卷积核尺寸步长[1,strides,strides,1]卷积形式[SAME,Valid]4.3.1卷积运算原理same卷积same的含义是卷积前后像素矩阵保持同样维度。常用指定起始点高度(H)宽度(W)起点位置偶数偶数偶数奇数奇数偶数奇数奇数4.3.1卷积运算原理same卷积计算结果4.3.1卷积运算原理same卷积TensorFlow代码实现4.3.1卷积运算原理valid卷积只考虑X能完全被K覆盖的情况计算过程4.3.1卷积运算原理valid卷积计算结果TensorFlow代码实现conv=tf.nn.conv2d(X,K,(1,1,1,1),'VALID')4.3.2卷积结果的输出在卷积过程中,卷积核在垂直方向的移动步长为SR,在水平方向上的移动步长为SL,则same和valid卷积的输出结果大小计算:
Same卷积Valid卷积输入张量大小R行L列R行L列卷积核大小FR行FL列FR行FL列垂直方向移动步长SRSR水平方向移动步长SLSL输出结果ceil(R/SR)行ceil(L/SL)列floor((R-FR)/SR)+1行floor((L-FL)/SL)+1s列4.3.3多通道卷积原理
4.3.3多通道卷积原理基本的多通道卷积卷积过程4.3.3多通道卷积原理基本的多通道卷积卷积结果TensorFlow代码实现4.3.3多通道卷积原理单个张量与多个卷积核的卷积卷积过程4.3.3多通道卷积原理单个张量与多个卷积核的卷积TensorFlow代码实现4.3.3多通道卷积原理多个张量与多个卷积核的卷积卷积过程4.3.3多通道卷积原理多个张量与多个卷积核的卷积TensorFlow代码实现4.3.3多通道卷积原理在每一通道上分别卷积(深度可分离卷积)将张量与卷积核对应的每一层进行线性运算,但是不将每一层的结果相加卷积过程4.3.3多通道卷积原理单个张量与多个卷积核在通道上分别卷积卷积过程4.3.3多通道卷积原理单个张量与多个卷积核在通道上分别卷积TensorFlow代码实现conv=tf.nn.depthwise_conv2d(X,K,(1,1,1,1),'VALID')4.3.4卷积运算的三个特性稀疏连接(SparseConnectivity)降低计算复杂度。减少因连接过多产生过拟合。参数共享参数共享是指相同的参数被用在一个模型的多个函数中。平移不变性当卷积在图像的某个位置学习到存在的特征时,它可以在之后的任何地方识别这个特征。使得卷积神经网络在处理图像数据时,可以高效地利用数据。池化操作PART4.44.4池化操作池化(Pooling)操作是对卷积得到的结果进一步处理,它是将平面内某一位置及其相邻位置的特征值进行统计汇总,并将汇总后的结果作为这一位置在该平面内的值输出。分类最大值池化平均值池化4.4.1same池化Same最大值池化示例:指定起始点——与same卷积起始点规则类似张量X池化窗口高度(H)宽度(W)起点位置偶数偶数偶数奇数奇数偶数奇数奇数4.4.1same池化Same最大值池化计算过程4.4.1same池化Same最大值池化池化结果TensorFlow代码实现:tf.nn.max_pool()4.4.1
same池化多通道张量的same最大值池化示例:三维张量X池化窗口4.4.1
same池化多通道张量的same最大值池化计算过程(步长为2):4.4.1
same池化多通道张量的same最大值池化计算结果(步长为2):TensorFlow代码实现4.4.1
same池化卷积与池化的区别卷积核的权重是一个未知的参数;而池化仅仅没有未知参数需要估计,也不需要参数优化的过程。因此,对计算机而言,池化是非常简单的操作。不管输入的像素矩阵有多少通道,只要进行卷积运算,一个卷积核参与计算只会产生一个通道;而池化是分层运算,输出的像素矩阵的通道取决于输入像素矩阵的通道数。4.4.1same池化多个张量的same最大值池化计算过程(步长为2):4.4.1same池化多个张量的same最大值池化TensorFlow代码实现:importtensorflowastfX=tf.constant([[[[2,5],[3,3],[8,2]],[[6,1],[1,2],[5,4]],[[7,9],[2,-3],[-1,3]]],[[[3,1],[-1,4],[3,2]],[[9,7],[2,-1],[4,3]],[[8,-2],[1,5],[5,9]]]],tf.float32)maxPool=tf.nn.max_pool(X,(1,2,2,1),[1,2,2,1],'SAME')session=tf.Session()print(session.run(maxPool))4.4.1same池化same平均值池化计算过程(步长为2):4.4.1same池化same平均值池化池化结果:TensorFlow代码实现:tf.nn.avg_pool()importtensorflowastfX=tf.constant([[[[3,1],[-1,4],[3,2]],[[9,7],[2,-1],[4,3]],[[8,-2],[1,5],[5,9]]]],tf.float32)avgPool=tf.nn.avg_pool(X,(1,2,2,1),[1,2,2,1],'SAME')session=tf.Session()print(session.run(avgPool))4.4.2
valid池化valid最大值池化valid池化的池化窗口只在张量内移动示例:三维张量X池化窗口4.4.2
valid池化valid最大值池化计算过程(步长为1):4.4.2
valid池化valid最大值池化池化结果:TensorFlow代码实现:importtensorflowastfX=tf.constant([[[[3],[2],[1],[4]],[[8],[1],[5],[9]],[[6],[2],[-1],[7]],[[-3],[4],[6],[5]]]],tf.float32)maxPool=tf.nn.max_pool(X,(1,2,2,1),[1,1,1,1],'VALID')session=tf.Session()print(session.run(maxPool))4.4.2
valid池化多通道张量的valid最大值池化示例:三维张量X池化窗口4.4.2
valid池化多通道张量的valid最大值池化计算过程(步长为1):4.4.2
valid池化多通道张量的valid最大值池化池化结果:TensorFlow代码实现:X=tf.constant([[[[3,1],[-1,4],[3,2]],[[9,7],[2,-1],[4,3]],[[8,-2],[1,5],[5,9]]]],tf.float32)maxPool=tf.nn.max_pool(X,(1,2,2,1),[1,1,1,1],'VALID')session=tf.Session()print(session.run(maxPool))4.4.2
valid池化多个张量的valid最大值池化计算过程:4.4.2
valid池化多通道张量的valid最大值池化TensorFlow代码实现:importtensorflowastfX=tf.constant([[[[3,1],[-1,4],[3,2]],[[9,7],[2,-1],[4,3]],[[8,-2],[1,5],[5,9]]],[[[1,4],[9,3],[1,1]],[[1,1],[1,2],[3,3]],[[2,1],[3,6],[4,2]]]],tf.float32)maxPool=tf.nn.max_pool(X,(1,2,2,1),[1,1,1,1],'VALID')session=tf.Session()print(session.run(maxPool))4.4.2
valid池化valid平均值池化TensorFlow代码实现:tf.nn.avg_pool(X,…,…,'VALID')课后习题
狗熊会THANKYOU狗熊会|聚数据英才,助产业振兴第五章:
经典卷积神经网络(上)陪伴中国数据产业一起成长主讲人:周静学习目标1.LeNet-5的网络结构及其代码实现;2.AlexNet的网络结构及其代码实现;3.VGG的网络结构及其代码实现;4.BatchNormalization的原理与应用技巧;5.DataAugmentation的原理与应用技巧。LeNet-5PART5.15.1.1LeNet-5网络结构LeNet-5介绍:由YannLeCun(杨立昆)于1998年提出的一种经典的卷积网络结构。第一个成功应用于数字识别问题的卷积神经网络。LeNet-5网络结构:共7层输入层卷积层池化层卷积层池化层全连接层输出层5.1.2案例:LeNet-5手写数字识别MNIST数据集展示:mnist.load_data()加载数据集数据预处理LeNet-5代码实现LeNet-5编译运行fromKeras.datasetsimportmnist(X0,Y0),(X1,Y1)=mnist.load_data()print(X0.shape)frommatplotlibimportpyplotaspltplt.figure()fig,ax=plt.subplots(2,5)ax=ax.flatten()foriinrange(10):Im=X0[Y0==i][0]ax[i].imshow(Im)plt.show();输出:(60000,28,28)5.1.2案例:LeNet-5手写数字识别MNIST数据集展示数据预处理LeNet-5代码实现LeNet-5编译运行fromKeras.utilsimportnp_utilsN0=X0.shape[0];N1=X1.shape[0]print([N0,N1])X0=X0.reshape(N0,28,28,1)/255X1=X1.reshape(N1,28,28,1)/255YY0=np_utils.to_categorical(Y0)YY1=np_utils.to_categorical(Y1)print(YY1)输出:[60000,10000][[000...100][001...000][010...000]...[000...000][000...000][000...000]]5.1.2案例:LeNet-5手写数字识别MNIST数据集展示数据预处理LeNet-5代码实现LeNet-5编译运行fromKeras.layersimportConv2D,Dense,Flatten,Input,MaxPooling2DfromKerasimportModelinput_layer=Input([28,28,1])x=input_layerx=Conv2D(6,[5,5],padding="same",activation='relu')(x)x=MaxPooling2D(pool_size=[2,2],strides=[2,2])(x)x=Conv2D(16,[5,5],padding="valid",activation='relu')(x)x=MaxPooling2D(pool_size=[2,2],strides=[2,2])(x)x=Flatten()(x)x=Dense(120,activation='relu')(x)x=Dense(84,activation='relu')(x)x=Dense(10,activation='softmax')(x)output_layer=xmodel=Model(input_layer,output_layer)model.summary()5.1.2案例:LeNet-5手写数字识别MNIST数据集展示数据预处理LeNet-5代码实现模型结构展示LeNet-5编译运行输入层卷积层1池化层1卷积层2池化层2拉直操作全连接层1全连接层2全连接层3输出维度参数个数5.1.2案例:LeNet-5手写数字识别MNIST数据集展示数据预处理LeNet-5代码实现LeNet-5编译运行通过pile实现pile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])model.fit(X0,YY0,epochs=10,batch_size=200,validation_data=[X1,YY1])AlexNetPART5.25.2.1AlexNet网络结构AlexNet介绍:ImageNet竞赛冠军获得者Hinton和他的学生KrizhevskyAlex于2012年设计。ImageNet竞赛中第一个使用卷积神经网络的参赛者。AlexNet网络结构:8层卷积层池化层卷积层池化层卷积层卷积层卷积层池化层输出层:三个全连接层5.2.2AlexNet创新点AlexNet创新点:成功使用ReLU作为CNN的激活函数;使用Dropout随机忽略一部分神经元,避免模型过拟合;在CNN中使用重叠的最大值池化(步长小于卷积核);提出局部响应归一化层(LocalResponseNormalization,LRN),后逐渐被BN(BatchNormalization)代替;使用CUDA加速神经网络的训练,利用了GPU强大的计算能力;采用了数据增强(DataAugmentation)技术,达到增加样本量的目的。5.2.3案例:中文字体识别——隶书和行楷数据准备二分类问题对数据的存储目录结构是有特殊要求构造数据生成器AlexNet代码实现AlexNet编译运行5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器:一种特有的数据读入方法。按照特定的目录结构和要求把相应少量的、多批次的数据读入内存,做相应的数据分析。代价:时间的延长和效率的降低优点:有限的内存资源的支持下,处理非常大的数据代码:ImageDataGenerator()AlexNet代码实现AlexNet编译运行5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器数据生成器AlexNet代码实现AlexNet编译运行fromKeras.preprocessing.imageimportImageDataGeneratorIMSIZE=227validation_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_alex/ChineseStyle/test/',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')train_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_alex/ChineseStyle/train',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器输出图像AlexNet代码实现AlexNet编译运行frommatplotlibimportpyplotaspltplt.figure()fig,ax=plt.subplots(2,5)fig.set_figheight(7)fig.set_figwidth(15)ax=ax.flatten()X,Y=next(validation_generator)foriinrange(10):ax[i].imshow(X[i,:,:,:])5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器AlexNet代码实现AlexNet编译运行fromKeras.layersimportActivation,Conv2D,BatchNormalization,DensefromKeras.layersimportDropout,Flatten,Input,MaxPooling2D,ZeroPadding2DfromKerasimportModelIMSIZE=227input_layer=Input([IMSIZE,IMSIZE,3])x=input_layerx=Conv2D(96,[11,11],strides=[4,4],activation='relu')(x)x=MaxPooling2D([3,3],strides=[2,2])(x)x=Conv2D(256,[5,5],padding="same",activation='relu')(x)x=MaxPooling2D([3,3],strides=[2,2])(x)x=Conv2D(384,[3,3],padding="same",activation='relu')(x)x=Conv2D(384,[3,3],padding="same",activation='relu')(x)x=Conv2D(256,[3,3],padding="same",activation='relu')(x)x=MaxPooling2D([3,3],strides=[2,2])(x)x=Flatten()(x)x=Dense(4096,activation='relu')(x)x=Dropout(0.5)(x)x=Dense(4096,activation='relu')(x)x=Dropout(0.5)(x)x=Dense(2,activation='softmax')(x)output_layer=xmodel=Model(input_layer,output_layer)model.summary()5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器AlexNet代码实现模型结构展示AlexNet编译运行输出维度参数个数Dropout操作5.2.3案例:中文字体识别——隶书和行楷数据准备构造数据生成器AlexNet代码实现AlexNet编译运行fromKeras.optimizersimportAdampile(loss='categorical_crossentropy',optimizer=Adam(lr=0.001),metrics=['accuracy'])model.fit_generator(train_generator,epochs=20,validation_data=validation_generator)
VGGPART5.35.3.1VGG网络结构VGG介绍牛津大学计算机视觉组和DeepMind公司共同研发的一种深度卷积神经网络VGG网络结构:6种从左到右深度越来越深加粗体表示新增的层所有网络结构都包含5组卷积操作,每组卷积包含一定数量的卷积层——可以看作一个五阶段的卷积特征提取。5.3.1VGG网络结构VGG16网络结构:5组卷积组和3个全连接层输入层:224×224×3的彩色图像。第1组卷积层(2次卷积):Conv2D(3×3,64),Stride(1),same,ReLU,Output:224×224×64。第1个池化层:MaxPooling2D(2×2),Stride(2),Output:112×112×64。第2组卷积层(2次卷积):Conv2D(3×3,128),Stride(1),same,ReLU,Output:112×112×128。第2个池化层:MaxPooling2D(2×2),Stride(2),Output:。第3组卷积层(3次卷积):Conv2D(3×3,256),Stride(1),same,ReLU,Output:56×56×256。第3个池化层:MaxPooling2D(2×2),Stride(2),Output:。第4组卷积层(3次卷积):Conv2D(3×3,512),Stride(1),same,ReLU,Output:28×28×512。第4个池化层:MaxPooling2D(2×2),Stride(2),Output:。第5组卷积层(3次卷积):Conv2D(3×3,512),Stride(1),same,ReLU,Output:。第5个池化层:MaxPooling2D(),Stride(2),Output:。输出层:Flatten,Dense(4096),Dense(4096),Dense(1000)。5.3.1VGG网络结构VGG16网络结构:5组卷积组和3个全连接层5.3.2案例:加利福尼亚理工学院鸟类数据库分类数据准备与处理数据生成器生成训练集与测试集VGG16代码实现VGG16编译运行VGG16+BN代码实现fromKeras.preprocessing.imageimportImageDataGeneratorIMSIZE=224train_generator=ImageDataGenerator(
rescale=1./255).flow_from_directory('./data_vgg/train',target_size=(IMSIZE,IMSIZE),batch_size=100,class_mode='categorical')validation_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_vgg/test',target_size=(IMSIZE,IMSIZE),batch_size=100,class_mode='categorical')5.3.2案例:加利福尼亚理工学院鸟类数据库分类数据准备与处理数据生成器生成训练集与测试集图像展示VGG16代码实现VGG16编译运行VGG16+BN代码实现frommatplotlibimportpyplotaspltplt.figure()fig,ax=plt.subplots(2,5)fig.set_figheight(6)fig.set_figwidth(15)ax=ax.flatten()X,Y=next(validation_generator)foriinrange(10):ax[i].imshow(X[i,:,:,])5.3.2案例:加利福尼亚理工学院鸟类数据库分类数据准备与处理VGG16代码实现VGG16结构展示VGG16编译运行VGG16+BN代码实现5.3.2案例:加利福尼亚理工学院鸟类数据库分类数据准备与处理VGG16代码实现VGG16编译运行VGG16+BN代码实现fromKeras.optimizersimportAdammodel_pile(loss='categorical_crossentropy',optimizer=Adam(lr=0.001),metrics=['accuracy'])model_vgg16.fit_generator(train_generator,epochs=20,validation_data=validation_generator)5.3.2案例:加利福尼亚理工学院鸟类数据库分类数据准备与处理VGG16代码实现VGG16编译运行VGG16+BN代码实现为了提高分类的准确率,可以尝试在每一层进行BatchNormalization的操作代码示例:x=BatchNormalization(axis=3)(x)BatchNormalization的技巧PART5.45.4.1BatchNormalization的核心思想Batch:只使用训练集中的一小部分样本对模型权重进行一次反向传播的参数更新,这一小部分样本被称作batch,也称之为批次。BatchNormalization的核心思想:5.4.2带有BN的逻辑回归数据准备与展示猫狗图像分类数据数据生成器生成训练集与测试集带有BN的逻辑回归模型fromkeras.preprocessing.imageimportImageDataGeneratorIMSIZE=128validation_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_bn/CatDog/validation',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')train_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_bn/CatDog/train',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')5.4.2带有BN的逻辑回归数据准备与展示猫狗图像分类数据数据生成器生成训练集与测试集展示图像带有BN的逻辑回归模型5.4.2带有BN的逻辑回归数据准备与展示带有BN的逻辑回归模型fromkeras.layersimportFlatten,Input,BatchNormalization,DensefromkerasimportModelinput_layer=Input([IMSIZE,IMSIZE,3])x=input_layerx=BatchNormalization()(x)x=Flatten()(x)x=Dense(2,activation='softmax')(x)output_layer=xmodel1=Model(input_layer,output_layer)model1.summary()5.4.2带有BN的逻辑回归数据准备与展示带有BN的逻辑回归模型模型结构展示5.4.2带有BN的逻辑回归数据准备与展示带有BN的逻辑回归模型模型结构展示带有BN的逻辑回归模型与拟合fromkeras.optimizersimportAdampile(loss='categorical_crossentropy',optimizer=Adam(lr=0.01),metrics=['accuracy'])model1.fit_generator(train_generator,epochs=200,validation_data=validation_generator)5.4.3带有BN的宽模型
5.4.4带有BN的深度模型这个模型中,卷积核的个数减少,但是模型的层数增加。BN总结:BatchNormalization在很多情况下确实是帮助巨大的,但并不是对所有情况都有帮助。在什么情况下BatchNormalization能够让结果变好,在什么情况下没有帮助是不清楚的,是值得我们思考和研究的。DataAugmentation的技巧PART5.55.5DataAugmentation的技巧DataAugmentation被翻译成“数据增强”,或者“数据增广”。它通过对数据施加各种变换来达到增加样本量的目的。数据增强是深度学习中除了BatchNormalization外另一个非常常用的技巧。5.5.1DataAugmentation的核心思想人和计算机处理图像不同。原来的图像被拉伸、变换或旋转,对计算机而言都是一个全新的矩阵。计算机对图像数据用矩阵形式表达不充分。把一张图像变成矩阵的过程中,是有信息损失的,而这些损失的信息很宝贵,有可能帮助我们把模型做得更好。5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集展示数据增强后的图像模型搭建模型的编译与拟合fromkeras.preprocessing.imageimportImageDataGeneratorIMSIZE=128validation_generator=ImageDataGenerator(rescale=1./255).flow_from_directory('./data_bn/CatDog/validation',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集shear_range表示拉伸变换;rotation_range用于定义图像左右旋转;zoom_range用于定义图像放大或者缩小的比例;width_shift_range表示水平方向上平移的尺度;height_shift_range表示垂直方向上平移的尺度;horizontal_flip=True表示允许水平方向的翻转。展示数据增强后的图像模型搭建模型的编译与拟合train_generator=ImageDataGenerator(rescale=1./255,shear_range=0.5,rotation_range=30,zoom_range=0.2,width_shift_range=0.2,height_shift_range=0.2,horizontal_flip=True).flow_from_directory('./data_bn/CatDog/train',target_size=(IMSIZE,IMSIZE),batch_size=200,class_mode='categorical')5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集展示数据增强后的图像模型搭建模型的编译与拟合frommatplotlibimportpyplotaspltplt.figure()fig,ax=plt.subplots(2,5)fig.set_figheight(6)fig.set_figwidth(15)ax=ax.flatten()X,Y=next(train_generator)foriinrange(10):ax[i].imshow(X[i,:,:,:])5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集展示数据增强后的图像模型搭建模型的编译与拟合IMSIZE=128fromkeras.layersimportBatchNormalization,Conv2D,Dense,Flatten,Input,MaxPooling2DfromkerasimportModeln_channel=100input_layer=Input([IMSIZE,IMSIZE,3])x=input_layerx=BatchNormalization()(x)for_inrange(7):x=BatchNormalization()(x)x=Conv2D(n_channel,[2,2],padding='same',activation='relu')(x)x=MaxPooling2D([2,2])(x)x=Flatten()(x)x=Dense(2,activation='softmax')(x)output_layer=xmodel=Model(input_layer,output_layer)model.summary()5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集展示数据增强后的图像模型搭建模型结构展示模型的编译与拟合5.5.2案例:猫狗分类数据生成器生成测试集利用数据增强技术生成的训练集展示数据增强后的图像模型搭建模型的编译与拟合fromkeras.optimizersimportAdampile(loss='categorical_crossentropy',optimizer=Adam(lr=0.0001),metrics=['accuracy'])model.fit_generator(train_generator,epochs=200,validation_data=validation_generator)课后习题课后习题1.请给出不少于3个基于图像的分类问题,并简要描述出和。2.LeNet-5虽然是一个非常经典的模型,但是不是意味着模型中的一些设定不能修改呢?比如卷积核的数量、大小、层数等,请尝试修改,看看模型精度会有什么变化。3.本章介绍了3个经典的卷积神经网络的应用案例,请任选一个数据集,以一个逻辑回归模型作为benchmark,将其预测精度与其他CNN模型对比。4.本章学习了一些经典的CNN神经网络,尝试把原来的一些经典卷积神经网络使用BatchNormalization改造,提高它的预测精度。有的经典神经网络已经考虑了BN技巧,那么那些没有考虑到的,请读者尝试一下,看看效果是变好了,还是变差了。5.思考如果不做数据加强,5.5.2节的案例结果会怎么样?狗熊会THANKYOU狗熊会|聚数据英才,助产业振兴第六章:
经典卷积神经网络(下)陪伴中国数据产业一起成长主讲人:周静学习目标1.Inception的网络结构及其代码实现;2.ResNet的网络结构及其代码实现;3.DenseNet的网络
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年云南工商学院高职单招职业适应性测试模拟试题及答案详细解析
- 2026年湖北中医药高等专科学校单招综合素质考试备考题库含详细答案解析
- 2026年朔州师范高等专科学校高职单招职业适应性测试模拟试题及答案详细解析
- 2026浙江宁波海洋发展集团有限公司招聘3人考试重点试题及答案解析
- 2026年朝阳师范高等专科学校单招综合素质笔试备考试题含详细答案解析
- 2026年贵州工商职业学院单招职业技能考试备考题库含详细答案解析
- 2026年广西生态工程职业技术学院单招职业技能考试备考题库含详细答案解析
- 2026年上饶幼儿师范高等专科学校单招综合素质笔试模拟试题含详细答案解析
- 2026年平顶山职业技术学院单招综合素质笔试备考试题含详细答案解析
- 2026广西桂林市直属机关公开遴选公务员26人考试参考题库及答案解析
- 2025年龙井市面向委培生和定向生招聘员额岗位(5人)笔试参考题库及答案解析
- 人教版三年级下册数学全册教学设计(配2026年春改版教材)
- 燃料安全生产管理制度
- 交通事故培训
- 九年级 22天1600个中考词汇背默专项训练(英语)
- 汪金敏 培训课件
- 包子铺股份合同协议书
- 先进复合材料与航空航天
- 鲁教版数学八年级下册全册课件(五四制)
- 银行资金闭环管理制度
- 中外航海文化知到课后答案智慧树章节测试答案2025年春中国人民解放军海军大连舰艇学院
评论
0/150
提交评论