版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目三:动物识别模型开发模型开发环境搭建项目情境Anaconda简介开发环境搭建我们将如何编写一个软件来识别图像中的狗和猫之间的区别?创建算法来区分猫和狗的图片并不直观或不明显。因此,与其尝试构建一个基于规则的系统来描述每个类别(狗与猫)的“外观”,我们还可以采用数据驱动的方法,提供每个类别的外观特征,然后我们用特征识别不同类别之间的差异。项目情境我们将这些示例称为标记图像的训练数据集,其中训练数据集中的每个数据点包括:一个图像、图片的标签/类别(即狗、猫、熊猫等)同样,重要的是这些图像中的每一个都有与之相关的标签,因为我们的监督学习算法需要看到这些标签来“自学”如何识别每个类别。本节先通过演示开发环境的搭建,后续再针对神经网络和模型训练进行展开讲解。项目情境Anaconda就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。通俗来说,我们在通过Pycharm进行深度学习开发时,经常需要下载并引入很多第三方资源库,如果我们直接引入Anaconda环境,可以省去反复下载第三方资源库的流程。Anaconda简介输入网址/products/distribution进入官方网站,点击下载Anaconda运行环境。开发环境搭建Anaconda下载打开下载完毕的安装文件,进入安装窗口后,点击Next进行下一步操作。开发环境搭建Anaconda安装本界面会显示关于Anaconda的协议和使用规则,这里直接选择IAgree即可。开发环境搭建Anaconda安装选择JustMe,只为此电脑安装Anaconda开发环境,点击Next进行下一步操作。开发环境搭建Anaconda安装点击Browse选择Anaconda的安装路径,默认在C盘下安装,建议选择其他盘符进行安装,设置好安装路径后,点击Next进行下一步操作。开发环境搭建Anaconda安装默认勾选RegisterAnaconda3asmydefaultPython3.9,这里直接点击Install安装即可。开发环境搭建Anaconda安装进入安装界面后,需要3~5分钟进行环境设置,等待Anaconda安装完毕。开发环境搭建Anaconda安装等待安装完毕后,点击Next进行下一步操作。开发环境搭建Anaconda安装此窗口介绍了一下Anaconda建议配合Jupyter一起使用,并提供了DataSpell开发工具的下载链接,这里直接点击Next进行下一步操作。开发环境搭建Anaconda下载安装完毕后,点击Finish即可,接下来我们需要测试一下Anaconda是否安装成功。开发环境搭建Anaconda下载点击左下角开始菜单,找到Anaconda3(64-bit)文件夹下的AnacondaNavigator选项,点击打开Anaconda可视化窗口界面。开发环境搭建Anaconda测试如果成功显示图示的Anaconda窗口则表示Anaconda正式安装成功,接下来我们需要将Anaconda引入到Pycharm开发工具中。开发环境搭建Anaconda测试点击Pycharm开发工具左上方File选项,选择Settings设置,打开设置窗口。开发环境搭建引入Anaconda环境设置窗口中找到Project选项,点击下方的PythonInterpreter选项,在窗口右上方选择齿轮标志点击。开发环境搭建引入Anaconda环境点击后选择Add添加Python运行环境。开发环境搭建引入Anaconda环境选择ExistingEnvironment,点击右侧按钮选择Anaconda运行环境的文件。开发环境搭建引入Anaconda环境这里选择Anaconda安装目录下的Python.exe安装文件,点击ok选择即可。开发环境搭建引入Anaconda环境设置好Anaconda的开发环境路径后,直接点击ok即可,等待1分钟后,Pycharm即可成功导入Anaconda环境,后续很多第三方库都可以直接从Anaconda中引入。开发环境搭建引入Anaconda环境本节介绍了深度学习对动物图像进行识别的基本原理和大致流程,并且详细介绍了Anaconda环境的下载、安装以及引入流程,为后续章节的内容提供了铺垫,更利于后续内容的正常展开总结项目三:动物识别模型开发模型开发环境搭建项目三:动物识别模型开发前馈神经网络DNN初识神经网络简介神经网络构成激活函数前馈神经网络前向传播算法反向传播算法人工神经网络:ArtificialNeuralNetwork,ANN简称神经网络(NeuralNetwork,NN),神经网络具有如下特点:模仿生物神经网络(特别是大脑)的结构和功能;是一种数学模型或计算模型,用于对函数进行估计或近似;具备学习功能,能够通过外接信息改变内部结构,是一种自适应系统。神经网络简介神经元是神经网络的重要组成部分,神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。神经元模型多个神经元并列组成神经网络层,多个层互连组成神经网络模型;神经网络由输入层(inputlayers)、隐藏层(hiddenlayers)、输出层(outputlayers)组成。通常中间隐藏层的层数需要进行调整,一层或多层。每根连接线在神经网络经过训练后拥有自己的权重神经网络定义神经网络构成如下左图所示,另一种常见的表达形式是从下到上表示一个神经网络。输入层在图的最下方,输出层则在图的最上方,如下右图所示。神经网络构成没有激活函数的神经网络,无论多少层,最终结果都只是输出的线性组合。神经元加入激活函数后,深层的神经网络可以逼近模拟任何非线性函数。通俗来说,就是让程序学会多元化处理数据信息。常用的激活函数有:sigmoid函数,tanh函数,Relu函数,softmax函数等等激活函数前馈神经网络也叫做多层感知机,是经典的深度学习模型,前馈神经网络中以上一层输出作为下一层输入,网络中无回路,输入的信息总是向前传播的,在神经网络训练过程中,输入层/输出层节点数通常固定,隐藏层节点数根据网络效果调节。神经网络结构在训练过程中的重点在于神经元之间的连接线的权重的确定。前馈神经网络前馈神经网络图示即为一个简单的前馈神经网络结构,其包含一个输入层,一个输出层,两个隐藏层每个神经元(除输入层外)接收多个输入,神经网络接收到一个输入(单个矢量)。每个隐藏层由一组带权重和偏置的神经元组成组成,每个神经元完全连接到前一层的所有神经元,对它们进行加权求和,将值传递给一个激活函数得到输出作响应,单层神经元完全独立运行,不共享任何连接。输出层在分类模型中,神经元值表示类别分数(分数越高,表示对应类别概率越大),图示为前馈神经网络整体架构。前馈神经网络前馈神经网络中设计隐藏层的好处就是为了提高训练效果,靠增加隐层节点数来获得较低的误差,比增加隐层数更容易实现。没有隐层的神经网络模型,实际上就是一个线性或非线性回归模型。隐藏层的节点数量设计通常与以下四种情况有关:输入/输出层的节点数、需解决的问题的复杂程度、激活函数的型式、样本数据的特性等、隐藏层设计前向传播算法可以理解为输入值到神经网络中,经过隐藏层的每个节点加权和计算,信息逐渐从输入层传递到输出层。但是传统算法中,计算后的结果为线性结果,不管它怎么组合,最后得到的分类器本质还是一个线性方程,处理不了的非线性问题。前向传播算法所以这时需要引入激活函数,引入激活函数的意义就是增加神经网络模型的非线性,图示就是引入激活函数后的情况。前向传播算法用网络推导的结果和正确结果计算得到误差值,再使用误差值反向更新神经网络每一层的权重参数和偏置参数,以期得到网络的最小误差,这就是反向传播算法。让正向传播和反向传播不断的往复进行,不断更新网络参数,最终使网络能够逼近真实的函数关系。在前馈网络中使用反向传播算法,通常称之为BackPropagationNetwork,简称BP网络,BP网络通常具有一层或多层隐含层,BP网络使用的反向传播算法核心规则是梯度下降算法。因此它的激活函数必须是处处可微的。反向传播算法反向传播算法的推理流程和运行原理如图所示。反向传播算法项目三:动物识别模型开发前馈神经网络DNN初识项目三:动物识别模型开发搭建基于DNN的动物识别任务需求项目开发项目总结本节我们将通过加载已有的数据集,搭建DNN前馈神经网络对指定猫的图片进行识别并返回预测识别结果,来简单了解一下DNN识别动物的全流程。任务需求引入搭建DNN神经网络的相关模块,其中lr_utils和dnn_utils为预先下载好的工具文件,用于设定激活函数和加载数据集使用。开发环境搭建模块导入加载完数据集后,将数据集分为训练集和测试集,然后分别输出训练集和测试集的数据信息。项目开发数据集测试测试结果如图所示,训练样本和测试样本的比例大约是4比1,每张图片的大小是固定的,维度中的3表示每个像素点由三原色(R,G,B)构成项目开发数据集测试结果对像素进行归一化处理,因为在深度神经网络训练时一般使用较小的权重值来进行拟合,而当训练数据的值是较大整数值时,可能会减慢模型训练的过程。如果我们在将图像输入到神经网络之前对图像做像素值归一化的处理,即将像素值缩放到0-1之间,就能够避免很多不必要的麻烦。项目开发像素归一化设置函数initialization用于返回神经网络的参数,参数通过随机数生成,为了防止参数范围过大,将随机结果乘0.1处理。项目开发设置随机参数设置函数linear_forward进行前向传播的线性处理,同时为了解决非线性问题,还需要引入激活函数进行非线性处理。项目开发前向传播自定义函数linear_backward进行反向传播处理,对数据结果进行线性处理。项目开发反向传播线性处理设置自定义函数引入激活函数对结果进行非线性处理。项目开发反向传播激活处理设置自定义函数用于构建两层神经网络项目开发设置循环反复进行前向传播和反向传播处理,这里设置两种激活函数,分别进行不同的操作,最终将反向传播后的数据存储到grads列表中。项目开发设置前向/反向传播反复更新参数减少样本误差,保证预测准确率。项目开发更新参数定义函数进行预测,调用L_model_forward传入参数接受预测结果,然后将预测结果求和后计算平均值并输出。项目开发预测通过图示结果可以看出经过反复迭代,设置不同参数进行训练后,预测的准确度是非常高的。项目开发预测结果展示调用自定义函数predict传入测试集数据进行反复测试。完成最终的模型评估。项目开发测试集测试传入指定图像信息,调用predict函数完成最终预测,实现动物图像识别项目开发图像识别测试总结如果出现扔非猫图,识别出是猫图的情况,不要慌张,对于这个数据集来说,即使在训练集和开发/测试集上有较好的效果,事实上在我们真正的测试集上(用户上传的图片)精度是完全达不到的!项目总结项目三:动物识别模型开发搭建基于DNN的动物识别项目三:动物模型开发卷积神经网络CNN初识什么是神经网络梯度下降算法反向传播算法什么是卷积什么是池化LeNet-5网络详解主要内容什么是神经网络机器学习,神经网络,深度学习之间的关系如图所示,三者之间是存在包含关系的机器学习神经网络深度学习CNN/RNN神经网络概述人工神经网络(Artificialneuralnetwork,ANN),简称神经网络(NN)。神经网络其实就是按照一定规则连接起来的多个神经元,图示为一个全连接神经网络的构建过程。梯度下降算法梯度下降算法是用来求函数最小值的算法,在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(GradientDescent)是最常采用的方法之一,另一种常用的方法是最小二乘法。主要用于优化单个参数的取值。每次沿着梯度的反方向,即函数值下降最快的方向,去进行迭代,就能走到函数的最小值附近(之所以是最小值附近而不是最小值那个点,是因为我们每次移动的步长不会那么恰到好处,有可能最后一次迭代走远了越过了最小值那个点)梯度下降算法梯度下降算法的公式与原理如图所示。反向传播算法反向传播算法是计算多层复合函数的所有变量的偏导数的利器,它可以根据定义好的损失函数(梯度下降算法)优化神经网络中参数的取值,从而使神经网络模型在训练数据集上的损失函数达到一个较小值。采用反向传播算法求一阶导数可以满足一般神经网络优化的需求。反向传播算法公式如图所示。
下图展示了卷积的过程,卷积降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量。其中黄色部分是卷积核,卷积核宽度为3,卷积的操作就是利用卷积核中每一个数字(权重)去乘输入图像中3*3区域内对应的值,然后求和得到一个新的结果。什么是卷积下图展示了卷积的全过程,例如:使用卷积核扫描左上方3*3图像,卷积核中每个数据和输入图像中的每个对应位置相乘求和,最终计算平均值进行输出。卷积过程卷积层工作原理上图为卷积的计算公式,第一个公式表示计算卷积后的图像宽度。W2表示卷积后输出的特征图宽度;W1是卷积前图像的宽度;F是卷积核宽度;P是填充数量,有的时候如果输入图像宽度太小,我们往往会在图像外侧填充几圈0,如果P的值是1,那么就补充1圈0,如果不需要补充,则P为0;S是步长,即卷积核扫描的步幅,一般设置为1。第二个公式表示计算卷积后的图像的高度,原理同第一个公式。课堂提问如图所示,以计算卷积后输出图像的宽度为例。如果输入图像的宽度为10,卷积核宽度为3,没有向输入图像的周围填充0,卷积的步长为1,即:第一次对左上角3*3区域卷积,第二次卷积向右推进一格继续扫描3*3区域,请问卷积后的宽度是多少?答案:8个宽度池化层主要的作用是下采样,通过去掉特征图中不重要的样本,进一步减少参数数量。池化的方法中最常用的是最大池化和均值池化。最大池化实际上就是在n*n的样本中取最大值,作为采样后的样本值,而平均池化就是提取样本中的平均值,作为采样后的样本值。下图为展示最大池化的工作原理。什么是池化LeNet-5诞生于1994年,是最早的深层卷积神经网络之一,推动了深度学习的发展。从1988年开始,在多次成功的迭代后,这项由Yann LeCun完成的开拓性成果被命名为LeNet-5。最初被用于手写数字识别,当年美国大多数银行就是用它来识别支票上面的手写数字的,它是早期卷积神经网络中最有代表性的实验系统之一。接下来我们分析一下它的工作原理。LeNet-5网格根据下图的内容,可以看出共包含8层网络,分别为:输入层(INPUT)、卷积层(Convolutions,C1)、池化层(Subsampling,S2)、卷积层(C3)、池化层(Subsampling,S4)、卷积层(C5)、全连接层(F6)、输出层(径向基层)LeNet-5网格1.INPUT层:输入层是一个32x32大小的图像LeNet-5网格2.C1层:假设卷积核的大小是5x5的,由于不考虑对图像的边界进行拓展,则卷积核将有28x28个不同的位置,也就是C1层的大小是28x28。这里设定有6个不同的C1层,每一个C1层内的权值是相同的。LeNet-5网格3.S2层:S2层是一个下采样层,即池化层。在LeNet-5系统中,下采样层比较复杂,由4个点下采样的加权平均为1个点。每个图层为14*14。池化是非线性下采样的一种形式,主要作用是通过减少网络的参数来减小计算量,并且能够在一定程度上控制过拟合。LeNet-5网格4.C3层:根据对前面C1层同样的理解,我们很容易得到C3层卷积后的大小为10x10。只不过,C3层的变成了16个10x10网络,有16个卷积核。LeNet-5网格如果S2层只有1个平面,那么由S2层得到C3就和由输入层得到C1层是完全一样的。但是,S2层由多层构成,所以这个流程需要按照一定的规则来组合这些层。具体的组合规则,在
LeNet-5系统中给出了下面的表格:简单的说,例如对于C3层第0张特征图,其每一个节点与S2层的第0张特征图,第1张特征图,第2张特征图,总共3个5x5个节点相连接。后面依次类推,C3层每一张特征映射图的权值是相同的。这种不对称的组合连接的方式有利于提取多种组合特征。LeNet-5网格C3层featuremapS2层featuremap5.S4层:S4层是在C3层基础上通过池化向下采样,前面已述。LeNet-5网格6.C5层:C5层是一个卷积层,有120个特征图。每个单元与S4层的全部16个单元的5*5邻域相连,故C5特征图的大小为1*1,这构成了S4和C5之间的全连接。之所以仍将C5标示为卷积层而非全连接层,是因为如果输入层规格变大,而其他的保持不变,那么此时特征图的维数就会比1*1大。C5层有48120个可训练连接。LeNet-5网格7.F6层:F6层有84个单元(之所以选这个数字的原因来自于输出层的设计),与C5层全相连。有10164个可训练参数。如同经典神经网络,F6层计算输入向量和权重向量之间的点积,再加上一个偏置。然后将其传递给sigmoid函数产生节点的输出。LeNet-5网格8.输出层:输出层也是全连接层,共有10个节点,分别表示数字0到9,且如果节点i的值为0,则网络识别的结果是数字i。采用的是径向基函数(RBF)的网络连接方式。LeNet-5网格本节总结在整个卷积神经网络中,卷积层和池化层的目的就是为了提取图像特征,减少参数样本的数量。全连接层则是在整个卷积神经网络中起到“分类器”的作用。在我们以后的工作中我们也可以运用这种思想对图片进行分类、识别等操作。在医疗、交通、教育等领域中有很广泛的应用。项目三:动物模型开发卷积神经网络CNN初识项目三:动物模型开发搭建基于CNN的动物识别模型机器如何识图卷积神经网络原理卷积层工作原理池化层工作原理全连接层工作原理代码展示主要内容机器如何识图通过对图像数字化处理,得到数字矩阵,如图所示卷积层工作原理卷积层的作用:就是提取图片每个小部分里具有的特征。假定我们有一个尺寸为6∗6的图像,每一个像素点里都存储着图像的信息。我们再定义一个卷积核(相当于权重),用来从图像中提取一定的特征。比如我们设计的一个卷积核如下左,想要识别出来的曲线如下右。卷积层工作原理现在我们用左侧的卷积核,来识别这个简化版的图片:一只漫画老鼠。卷积层工作原理当机器识别老鼠的屁股的时候,真实区域数字矩阵与卷积核相乘后,输出:6600。而用同一个卷积核,来识别老鼠的耳朵的时候,输出则很小:0。卷积层工作原理卷积层工作原理总结我们就可以认为现有的这个卷积核保存着曲线的特征,匹配识别出来了老鼠的屁股是曲线的。但是我们还需要其他特征的卷积核,来匹配识别出来老鼠的其他部分。卷积层的作用其实就是通过不断的改变卷积核,来确定能初步表征图片特征的有用的卷积核是哪些,再得到与相应的卷积核相乘后的输出矩阵。池化层工作原理池化层的输入就是卷积层输出的原数据与相应的卷积核相乘后的输出矩阵。最常见的两种池化层的形式均值池化:mean-pooling——选取指定区域内数值的平均值来代表整片区域。最大池化:max-pooling——选取指定区域内最大的一个数来代表整片区域。如上图所示:在4*4的数字矩阵里,以步长2*2选取区域。图左:以左上方2*2区域为例,将区域[1,2,3,4]中最大的值4池化输出;图右:以左上方2*2区域为例,将区域[1,2,3,4]中平均值5/2池化输出。池化层工作原理举例说明两种池化方式:(池化步长为2,选取过的区域,下一次就不再选取)全连接层工作原理卷积层和池化层的工作就是提取特征,并减少原始图像带来的参数。然而,为了生成最终的输出,我们需要应用全连接层来生成一个等于我们需要的类的数量的分类器。全连接层的工作原理和神经网络学习很类似,我们需要把池化层输出的张量重新切割成一些向量,乘上权重矩阵,加上偏置值,然后对其使用ReLU激活函数,用梯度下降法优化参数即可。本节总结在整个卷积神经网络中,卷积层和池化层的目的就是为了提取图像特征,减少参数样本的数量。全连接层则是在整个卷积神经网络中起到“分类器”的作用。在我们以后的工作中我们也可以运用这种思想对图片进行分类、识别等操作。在医疗、交通、教育等领域中有很广泛的应用。思考题最后给你留一道思考题,就是池化层的两种池化方式谁更优一些呢?项目三:动物模型开发搭建基于CNN的动物识别模型项目三:动物模型开发动物识别模型的训练模型简介模型训练流程收集数据集拆分数据集训练神经网络评估神经网络在人工智能中,面对大量用户输入的数据/素材,如果要在杂乱无章的内容准确、容易地识别,输出我们期待输出的图像/语音,并不是那么容易的。因此算法就显得尤为重要了。算法就是我们所说的模型。模型简介图示就是构建模型,对输入的数据进行训练后,得到预测结果的流程图。模型训练流程当然,算法的内容,除了核心识别引擎,也包括各种配置参数,例如:语音智能识别的比特率、采样率、音色、音调、音高、音频、抑扬顿挫、方言、噪音等乱七八糟的参数。成熟的识别引擎,核心内容一般不会经常变化的,为实现”识别成功”这一目标,我们只能对配置参数去做调整。对于不同的输入,我们会配置不同参数值,最后在结果统计取一个各方比较均衡、识别率较高的一组参数值,这组参数值,就是我们训练后得到的结果,这就是训练的过程,也叫模型训练。深度学习模型训练的流程大致可以分为如下四个步骤。模型训练流程构建深度学习网络的第一个组成部分是收集我们的初始数据集。我们需要图像以及与每个图像相关的标签。这些标签应该来自一组有限的类别,例如:类别=狗、猫、熊猫、大象等此外,每个类别的图像数量应该大致均匀(即每个类别的示例数量相同)。如果我们的猫图像数量是狗图像的两倍,熊猫图像的数量是猫图像的5倍,那么我们的分类器自然会偏向于过度拟合这些代表性很强的类别。收集数据集现在我们有了初始数据集,我们需要将它分成两部分:一个训练集、一个测试集一个训练集是使用我们的分类,以“学习”每个类别并通过输入数据预测,然后自行纠正错误的预测。分类器经过训练后,我们可以评估在测试集上的表现。这是非常重要的是,训练集和测试集是相互独立和不重叠!如果我们将测试集用作训练数据的一部分,那么我们的分类器就具有不公平的优势,因为它之前已经看过测试示例并从中“学习”了。相反,我们必须将此测试集与我们的训练过程完全分开,并仅将其用于评估我们的网络。训练集和测试集的常见拆分大小包括66.6%,33%、75%,25%和90%,10%。拆分数据集训练集和测试集的功能如图所示,通过对训练集中的数据进行训练提取特征模型,然后用测试集中的图像进行误差率测试。拆分数据集这些数据如此拆分是有道理的,但是如果有要调整的参数怎么办?神经网络有许多例如,学习率、衰减、正则化等需要对其进行调整以获得最佳性能。我们将这些类型的参数称为超参数。拆分数据集但是我们思考一下,如果数据集仅仅分为训练集和测试集,那么我们通过修改一些超参数(不能通过学习来自动调整的参数)来降低误差,但是这种方法在实际中的应用效果却并没有想象的那么好。这是因为超参数都是基于测试集来调整的,就相当于把测试集当成了训练超参数的数据。这样对于新的数据效果不一定会更好。于是就想出一种解决办法,即保留一个数据集作为验证集,在这些步骤做完之后再进行最终的验证。拆分数据集训练集、验证集和测试集的工作流程如下图所示,可以很明显看到训练集用于训练模型,验证集用于调节超参数,而测试集就只是用于评估模型好坏的。拆分数据集给定我们的训练图像集,现在可以训练我们的神经网络。这里的目标是让我们的神经网络学习如何识别我们标记数据中的每个类别。当模型出错时,它会从这个错误中学习并改进自己的模型参数。我们在后续的案例中会详细讲解如何训练神经网络中的数据。训练神经网络最后,我们需要评估训练好的神经网络。对于我们测试集中的每个图像,我们将它们呈现给神经网络并要求它预测它认为图像的标签是什么。然后,我们将模型对测试集中图像的预测制成表格。最后,将这些模型预测与我们测试集中的真实标签进行比较。真实标签代表图像类别。从那里,我们可以计算我们的分类器得到正确预测的数量,并计算聚合报告,如精度、召回率和f度量,这些报告用于量化我们网络的整体性能。评估神经网络不可避免地,在训练集上训练一个深度学习网络,在测试集上对其进行评估时发现它获得了很高的准确率,然而将其应用于训练集和测试集之外的图像,结果发现预测结果表现不佳。这个问题称为泛化,若神经网络模型没有正常识别或者训练不理想,我们需要考虑训练数据集是否准确反映了这些变化因素的示例?如果没有,我们将需要收集更多的训练数据以及调整神经网络的各种超参数。以上就是我们搭建深度学习神经网络模型的几个步骤。泛化项目三:动物模型开发动物识别模型的训练项目三:动物模型开发动物识别模型的优化项目三:动物模型开发动物识别模型的优化模型优化的意义训练和泛化误差K折交叉验证过拟合和欠拟合梯度消失常见问题解决机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢?因为存在着训练误差和泛化误差。模型优化的意义训练误差:指模型在训练数据集上表现出的误差。泛化误差:指模型在任意⼀个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。训练误差的期望小于或等于泛化误差。也就是说,⼀般情况下,由训练数据集学到的模型参数会使模型在训练数据集上的表现优于或等于在测试数据集上的表现。由于无法从训练误差估计泛化误差,⼀味地降低训练误差并不意味着泛化误差⼀定会降低。所以机器学习模型应关注降低泛化误差。训练和泛化误差由于验证数据集不参与模型训练,当训练数据不够⽤时,预留⼤量的验证数据显得太奢侈。⼀种改善的方法是K折交叉验证(K-foldcross-validation)。在K折交叉验证中,我们把原始训练数据集分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每⼀次,我们使⽤⼀个⼦数据集验证模型,并使用其他K−1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。K折交叉验证图示为K交叉验证的具体流程,通俗来说,交叉验证就是每一次都将不同的数据集当做测试集对模型进行测试,最后取误差平均值当做最终结果,这么做可以减小误差。是模型调优的一个重要手段。K折交叉验证欠拟合:模型无法得到较低的训练误差。过拟合:是模型的训练误差远小于它在测试数据集上的误差。应对欠拟合和过拟合的⼀个办法是针对数据集选择合适复杂度的模型。见下图所示。欠拟合和过拟合图示为常见的防止过拟合以及防止欠拟合的方式,其中比较常用的就是减少或者加大模型参数来控制拟合情况。欠拟合和过拟合训练神经网络,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸,也就是你训练神经网络的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。本质上,梯度消失和爆炸是一种情况。在深层网络中,由于网络过深,如果初始得到的梯度过小,或者传播途中在某一层上过小,则在之后的层上得到的梯度会越来越小,即产生了梯度消失。梯度爆炸也是同样的。一般地,不合理的初始化以及激活函数,如sigmoid等,都会导致梯度过大或者过小,从而引起消失/爆炸。梯度消失/梯度爆炸防止梯度消失/梯度爆炸的常见解决方案如下:1.预训练加微调:其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,此过程就是逐层“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)。梯度消失/梯度爆炸2.梯度剪切、正则:梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。梯度消失/梯度爆炸3.ReLu、leakReLu等激活函数:ReLu:其函数的导数在正数部分是恒等于1,这样在深层网络中,在激活函数部分就不存在导致梯度过大或者过小的问题,缓解了梯度消失或者爆炸。同时也方便计算。当然,其也存在存在一些缺点,例如过滤到了负数部分,导致部分信息的丢失,输出的数据分布不在以0为中心,改变了数据分布。leakrelu:就是为了解决relu的0区间带来的影响,其数学表达为:leakrelu=max(k*x,0)其中k是leak系数,一般选择0.01或者0.02,或者通过学习而来。梯度消失/梯度爆炸1.解决训练样本少的问题利用预训练模型进行迁移微调(fine-tuning),预训练模型通常在特征上拥有很好的语义表达。此时,只需将模型在小数据集上进行微调就能取得不错的效果。数据集进行下采样操作,使得符合数据正态分布。使用数据集增强、正则或者半监督学习等方式来解决小样本数据集的训练问题。常见问题解决2.如何提升模型的稳定性?正则化(L2,L1,dropout):模型方差大,很可能来自于过拟合。正则化能有效的降低模型的复杂度,增加对更多分布的适应性。前停止训练:提前停止是指模型在验证集上取得不错的性能时停止训练。这种方式本质和正则化是一个道理,能减少方差的同时增加的偏差。目的为了平衡训练集和未知数据之间在模型的表现差异。扩充训练集:正则化通过控制模型复杂度,来增加更多样本的适应性。特征选择:过高的特征维度会使模型过拟合,减少特征维度和正则一样可能会处理好方差问题,但是同时会增大偏差。常见问题解决3.改善模型的思路数据角度:增强数据集。无论是有监督还是无监督学习,数据永远是最重要的驱动力。更多的类型数据对良好的模型能带来更好的稳定性。对模型来说,“看到过的总比没看到的更具有判别的信心”。调参优化角度:超参数调整本身是一个比较大的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 急性化脓性阑尾炎术后感染控制与恢复全流程规范化管理指南
- 工贸企业分管工艺质量安全工作领导安全生产责任制培训
- 2025《阿房宫赋》文学成就课件
- 运行电工安全职责培训
- 2026年高考综合素质检测语文试题及答案
- 各类机械设备安全使用规定培训课件
- 探水员安全生产岗位责任制培训
- 营销中心职业健康安全管理职责培训
- 2026年广东省茂名市单招职业倾向性测试题库含答案详解(模拟题)
- 2026年广东茂名幼儿师范专科学校单招职业适应性测试题库附参考答案详解(基础题)
- DB52-T 1685-2022 电动汽车充电站(桩)防雷技术规范
- 建设工程项目经济分析与评价PPT完整全套教学课件
- 技术交底制度
- 废塑料高温裂解干馏可行性报告
- 地质勘探原始记录表格【实用文档】doc
- GB/T 3146.1-2010工业芳烃及相关物料馏程的测定第1部分:蒸馏法
- GB/T 30812-2014燃煤电厂用玻璃纤维增强塑料烟道
- 住院医师规范化培训临床技能结业考核体格检查评分表(神经外科)
- 小学二年级下册体育教案(全册)
- 中国外文出版发行事业局所属企事业单位公开招聘71人模拟试卷【共500题附答案解析】
- 《导游基础知识》61中国古典园林概说课件
评论
0/150
提交评论