基于深度学习的人脸表情识别系统.docx

上传人:一*** 文档编号:68718495 上传时间:2022-12-29 格式:DOCX 页数:37 大小:921.31KB
返回 下载 相关 举报
基于深度学习的人脸表情识别系统.docx_第1页
第1页 / 共37页
基于深度学习的人脸表情识别系统.docx_第2页
第2页 / 共37页
点击查看更多>>
资源描述

《基于深度学习的人脸表情识别系统.docx》由会员分享,可在线阅读,更多相关《基于深度学习的人脸表情识别系统.docx(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、基于深度学习的人脸表情识别系统学 院:专 业:姓 名:指导老师:信息学院自动化方锦海学 号:职 称:160104105558杨聚庆教授中国珠海二二年四月北京理工大学珠海学院2016届本科生毕业设计诚信承诺书本人郑重承诺:我所呈交的毕业论文基于深度学习的人脸表情识别系统是在指导教师的指导下,独立开展研究取得的成果,文中引用他人的观点和材料,均在文后按顺序列出其参考文献,论文使用的数据真实可靠。本人签名:日期: 2020 年 4 月 19 日基于深度学习的人脸表情识别系统摘 要随着社会的进步和经济的发展,人工智能已经开始应用于各种各样的场景,最典型的应用就是机器人的应用。人机交互的设计已经越来越成

2、熟,而机器人要想了解人的正确想法就不应仅体现在语言上,还应该在其他方面分析出人的正确情感,表情识别分析就是一个主要攻克点。本文从自然神经网络的介绍一直到运用卷积神经网络搭建模型进行具体的分析,包括自然神经网络和卷积神经网络的知识归纳,包括一些数学推导过程,对模型搭建过程和结果分析,会将所用的知识点进行详细归纳让人更好地理解和实现实际的模型搭建。本文的模型搭建最终使用2012年ILSVRC的冠军AlexNet实现,且会对模型进行分析。结尾也会适当提出运用VGG网络、ResNet、GoogLeNet等具有较多层神经网络的方法对模型的改进。关键词:表情识别、卷积神经网络、知识归纳、数学推导、Alex

3、Net Facial expression recognition system based on deep learningAbstractWith the progress of society and the development of economy, artificial intelligence has been applied in a variety of scenarios, the most typical application is the application of robots. The design of human-computer interaction

4、has become more and more mature. In order to understand the correct thoughts of people, robots should not only be reflected in language, but also analyze the correct emotions of people in other aspects. Facial expression recognition analysis is a major breakthrough point. This article from the natur

5、e of the neural network is introduced to use convolution neural network to build model for concrete analysis, including natural neural network and the convolution of the neural network knowledge, including some mathematical derivation, analysis on the structures, processes and results of the model,

6、will be used in the knowledge points in detail summarized make people better understand and realize the actual model is set up. The model building in this paper is finally implemented by AlexNet, the champion of ILSVRC in 2012, and the model will be analyzed. At the end of the paper, it will also pu

7、t forward the improvement of the model by using VGG network, ResNet, GoogLeNet and other methods with more layers of neural networks.Keywords: Facial expression recognition ; convolutional neural network; Knowledge of induction ; Mathematical deduction ; AlexNet ; 目 录1 绪论 1.1 人脸表情识别的目的和现实意义11.2 人脸表情

8、识别技术国内外现状11.3 环境的搭建21.3.1 Python21.3.2 Anaconda331.3.3 jupyter notebook32深度学习的基本原理 2.1引言32.2自然神经网络的基本原理32.3卷积神经网络的基本原理52.3.1引言52.3.2 CPU与GPU52.3.3激活函数与学习率52.3.4学习率62.3.5感受野和卷积核62.3.6卷积层和池化层72.3.7填充82.3.8全连接层82.3.9特征归一化92.3.10损失函数与优化器92.3.11 dropout(正则化)102.3.12 BatchNormalization102.3.13混淆矩阵和ROC曲线11

9、2.3.14 epochs与batch_size112.3.15 training loss与validation loss的关系113基于卷积神经网络的人脸表情识别 3.1引言113.2数据的预处理123.3图片的转换133.4搭建模型153.5直接用.csv文件中的数据进行模型搭建与训练153.6最终模型展示173.7结果分析193.8改进过程分析204关于VGG网络、ResNet、GoogLeNet的图像处理 4.1引言214.2 VGG网络214.3 ResNet214.4 GoogLeNet215总结 参考文献 23致谢 24附录 251 绪论人工智能是近几年的热点,python的简

10、易学习和GPU的发展,极大的促进了机器学习和深度学习的发展,为了解决各种问题演化出了各种神经网络如:自然神经网络、卷积神经网络等。随着人们不断地去学习和优化,各种各样的模型被人们搭建出来,也出现了各种算法。本文将从基础的自然神经网络开始,一直到用卷积神经网络进行图像处理,会详细的分析和总结所有知识点,供大家学习参考。1.1人脸表情识别的目的和现实意义随着科技的不断进步,人们对机器人以及其他人工智能的研究已经越来越成熟,人机的交互一直是机器人研究的一个热门,怎么样才能使机器人更好的理解和读懂人们的意思并进行正确的行为是一个重要的课题。那怎么样才能让机器人准确的分析出人此时此刻的心理状态呢?一提到

11、这个问题,人们的主要思路肯定是对机器人本身的词库进行拓展,并且设成堆的关键词,让机器人准确的抓取人们语言中所要表达的情感。但是曾经有个著名的心理学家提出,人类在生活交流就是一种信息的传递,而用语言进行信息传递的方式只占总体的7%,肢体语言及其他方式占总体的百分之38%,通过人脸表情进行信息传达的方式高达55%。在生活中,可以从一个人的表情分析出一个人此时此刻的心理状态,哲学家将人的表情分为七大类,分别是开心、悲伤、恐惧、愤怒、厌恶、惊讶、中性七种。这说明如果能用一个模型进行人脸表情的识别和分析就能对人们此时此刻的心情状态进行准确的分析,这对机器人分析出人的情感的帮助远远大于对关键词的分析,对于

12、机器人的发展以及实际应用是一个巨大的飞跃。1.2人脸表情识别技术国内外现状早在19世纪,达尔文就发表过一篇文章论人类和动物的表情,表面了表情的一致性,说明表情是不按性别与种族来判断的。Facial Expression Recognition (简称FER)在国外已经较为成熟,因为在几年前就举办了关于表情识别的比赛,比如2013年的FER2013,Emotiw等。因为各种神经网络都是国外的大牛提出,所以国内在表情识别领域一直处于追赶的一方。但借助互联网平台可以方便与国外的深度学习进行交流和探讨,国内的深度学习算法也发展得很快,总体上也不算太过于落后。人脸表情识别技术主要分为两部分,一部分是在图

13、片中将表情特征进行提取,然后进行模型的搭建与训练,另一部分就是人脸的检测。人脸的检测分为动态检测和静态检测,静态检测要对图片进行处理对人脸进行扫描和识别,运用各种算法进行特征提取;动态监测要通过特定的摄像头进行动态人脸的识别扫描和处理后传送给模型,其中涉及到3D模型的算法,传给模型的过程中也需要进行类似静态检测的过程对人脸进行扫描和识别。人脸识别是深度学习和机器视觉的一个交互学科和热点,本文不作着重解释。对于表情特征提取现国内外具有很多热门的算法,主要有几何特征提取、运动特征的提取、统计特征提取和频率域特征提取。几何提取就是对人脸表情的各个特征进行提取和分析,如眼睛、嘴巴等,这是最原始的做法也

14、最好理解和实现,本文也是运用CNN网络对人脸表情进行提取后识别表情。对于其他特征提取这里也介绍几个现阶段国内外热门的人脸表情识别方法:1. Gabor变换:通过不同的卷积核频率对图像进行多频率的分析,可以有效的提取不同空间位置中不同细节程度的特征,经常与支持向量机一起使用。在空间域中有较好的分辨能力且有明显的方向选择性。但如果是低维度的特征会出现识别和匹配困难的问题,样本少时准确率也会大大降低;2. 支持向量机:是一种人类识别的分类器,常与Gabor滤波器一起使用,但是当样本过大时计算量会很大,学习的过程会很复杂;3. 光流法:将运动图像用函数表示,根据图像强度守恒原理建立光流约束方程,通过求

15、解方程计算运动参数。可以反映人脸表情变化的实际规律,并且受外界的影响较小,尤其是光照的变化对识别率不会产生太大的变化。但是因为计算量大和识别模型、算法较复杂,在小样本模型中适用性小;4. 隐马尔模型:由观察的面部表情序列模型计算面部表情序列的概率,选用最佳准则来决定状态的转移,得到相应的模型参数。采用隐马尔模型的识别准确率较高,但是对前期的面部表情序列模型要求较高,对表情识别算法的准确率也有较大的影响。1.3环境的搭建要想项目顺利进行,环境的搭建是必不可少的一步。首先需要明确想要的工作环境,我是在window系统下进行项目的进行。(对以后想从事深度学习工作的学者建议使用Linux系统,以为企业

16、的项目一般都会用Linux系统进行,提前熟悉有助于以后就业).1.3.1 Python第一步是安装python3.6.3(3.6版本的python对代码和各种源码包的兼容性更强)Python的主要的功能就是将编程语言一行一行地进行转译,每转译一行程序就会得到相应的叙述,然后才会进行下一行程序的转译,就像和机器人互动一样,每给他一条或多条指令后会得到相应的回复后再编译下一个指令。安装完python要配置环境变量,在我的电脑-属性-高级设置-环境变量里进行添加。1.3. 2 Anaconda3第二步是安装Anaconda3,Anaconda3是Python的发行版本,集成了python和常见的软件

17、库,比如numpy、pandas等,因为集成了很多软件库所以文件比较大。这里要注意一点每一个软件库都是分版本的,比如你在网上找的一个项目想验证一下,但是可能因为numpy的版本不匹配导致代码编译失败,这时可用Anaconda自带的虚拟环境进行软件库指定安装,用conda指定版本安装。1.3. 3 jupyter notebook第三步是安装jupyter notebook,jupyter Notebook也可以称为Python notebook。是一个交互式笔记本,可以在运行代码时像word操作一样可以做大量解释说明。它就是一个网页程序,可以理解为运用浏览器编写Python文件, 一般可用于机

18、器学习、数据清理和转换和统计建模等。jupyter Notebook可以直接用Anaconda自带的虚拟环境用pip jupyter notebook指令就可以直接安装使用。2深度学习的基本原理2.1引言在深度学习真正发展前,具有浅层网络和深层网络的划分,将机器学习分为两个阶段:第一阶段的机器学习运用了Backpropagation,也就是BP算法。当时也是机器学习比较热门的时期,提出了很多不同的神经网络模型,比如支持向量机(SVM)、最大熵法(LR);第二个阶段就是在2006年,机器学习的专家Hinton提出使用多层神经网络进行模型搭建,使深度学习更快的发展。2.2自然神经网络的基本原理把自

19、然神经网络用科学领域的理论进行表述分析,就是一种模仿生物神经网络,比如动物的中枢神经系统,特别是大脑的结构和功能的模型,用于对函数进行近似地计算。图2.1自然神经网络示意图神经网络模型的核心体系结构是由大量简单的神经元处理节点组成的,这些节点是在不同的层次上相互连接和组织的。一个层中的单个节点连接到上一层和下一层中的其他几个节点。接收并处理来自一个层的输入,以生成传递到下一层的输出。自然神经网络的第一层为输入层,最后一层为输出层,输入层和输出层之间的每一层都为隐藏层。分析完神经网络后可以得出两个基本的组成成分,分别是神经元和突触,而在自然神经网络中他们代表着两个重要的参数:节点和权值。节点也称

20、为感知器,具有一个或多个权重输入的计算单元,以节点组织成层后构成网络。权重则是指在这个节点数据的重要性。举个简单的例子:在一张白纸上画一个苹果并对这张纸运用神经网络进行分析,边缘的空白部分在神经网络中的权重就很低,而苹果的权重就会很高,在后面会提到权值共享等概念。为了卷积神经网络搭建过程的分析,必须先总结一下BP算法和梯度下降法。BP算法主要分成两部分:一部分就是激励传播,另一部分就是权值更新。激励传播是指每次进行数据迭代时,将数据传送到网络后经过响应得到相应响应的输出,再将输入和输出求差值,从而获得隐藏层和输出层的响应误差。权值更新是指在输出时将输入激励和响应误差相乘,从而获得权重的梯度,将

21、梯度乘于k后加到原来的权重上。然后不断地进行激励传播和权值更新,直到达到想要的目标值附近。而梯度下降法就是一种权值更新的方法,梯度的分析要从导数、偏导数和方向导数进行分析,具体的推导过程就不叙述了,总结一下就是梯度是函数在某一点最大的方向导数,此时沿这个方向有最大的变化率,在优化目标函数的时,选择最大方向导数的方向进行权值更新就可以更快的达到想要的结果。2. 3卷积神经网络的基本原理2.3.1引言提到图像处理就必定会提及卷积神经网络,因为图像都是有一个一个的像素点组成,大的图片会有成千上个像素点,而卷积神经网络能运用卷积核对图像进行批量处理并且权值共享。2.3.2 CPU与GPU提到图像处理就

22、必定会提及卷积神经网络,因为图像都是有一个一个的像素点组成,大的图片会有成千上个像素点,而卷积神经网络能运用卷积核对图像进行批量处理并且权值共享。2.3.3 激活函数与学习率神经元的输入值等于权值相乘再加上一个偏置,使用激活函数并不是用来激活神经元,而是为了使神经网络具备分层的非线性能力,使网络能解决更多的的问题。激活函数用于对输入进行非线性变换,将其映射到输出,主要的激活函数有:1. Sigmoid :Sigmoid 是一个将实值输入压缩到【0,1】的区间,因为函数图像与指数函数相近,在物理意义上比其他激活函数更接近生物神经元,所以使用范围比较广,主要用于二分类的输出层。但是Sigmoid具

23、有饱和性,进入饱和区后会导致梯度变得非常小,会产生梯度消失的现象。它的公式如下:fz= 11+exp(-z)函数图像:图2.2 Sigmoid与Tanh的变化曲线2. Tanh: Tanh(Hyperbolic tangent function)中文名叫双曲正切函数,是将一个输入压缩到【-1,1】的区间,函数图像比较平滑且具有单调性。但是tanh与Sigmoid一样具有饱和性,进入饱和区后会造成梯度消失。它的公式如下:fz=tanhz ez-e-zez+e-z3.Relu :(rectified linear unit)是近代深度学习和机器学习中最常用的激活函数。但是它的有缺点也很明显,它的缺

24、点是:当输入值为负数时,其导数的结果始终为0,此时神经元不能更新参数,相对于生物结构就是神经元已经死去,这种现象被称为“Dead Neuron”;但它的优点是:在梯度下降的过程中收敛速度更快,在模型搭建过程中参数的计算更快。为了解决relu的缺点,引入了各种新型的relu函数,比如带泄露单元的relu(Leaky Relu)、随机relu函数(RRelu)。2.3.4学习率总结完激活函数后就要总结一下学习率:在神经网络中需要不断地对权值进行优化,当采用梯度下降法时会有一个初始解,然后在初始值确定一个方向导数进行移动,移动的步长由自己定义,使初始解在不断优化的过程中更靠近预测的目标值。而在移动的

25、过程中步长太大会导致可能跨过最优解,步长太小会使迭代次数增加,需要更多成本,因此步长的调制就很重要,而学习率就是运用于对步长的调整。例如学习率为0.01时,每次调整的步长为0.01梯度。2.3.5感受野和卷积核卷积神经网络是受哺乳动物视觉的启发,将视觉皮层包含着一系列组合在一起的细腿称为感受野,他们是小而敏感的视觉区域。这些细胞在输入空间上充当局部的过滤器,适合用来处理具有局部相关性的图像。通俗的定义感受野就是每一层卷积网络输出的特征图上的像素点在输入中映射的区域。图2.3 卷积过程示意图在图中可以清楚的明白感受野的概念,图中33的矩阵就是卷积核。一张NN的图像要对他进行处理分析就要进行线性的

26、滤波,可以用一个矩阵对图像进行处理,输出的每个像素点为感受野像素和滤波器矩阵相应元素的乘积和。移动的距离为步长,一般都为1,而卷积核的大小一般都为33或55,奇数的卷积核才具有半径的概念。而卷积核中所有元素之和应该等于1,这是为了使图片经过卷积后亮度保持不变,当元素和大于1时卷积后图像会变得比原图更亮,反之小于1时图片会变暗。对于卷积后每个像素值的大小超过255则直接截断到0或255。这里说明一下普通的黑白色图中每个像素点只有一个通道,0-255代表灰度值,而彩图像的每个像素点具有三个通道用来确定像素点RGB值,同样一张255255的图片,卷积处理黑白图只需要处理255255的像素点,而处理彩

27、色图片需要处理2552553的像素点。2.3.6卷积层和池化层卷积神经网络分为输入层、输出层和隐藏层,而隐藏层又分为卷积层和池化层。卷积层就是由若干个卷积核构成,每个卷积核的元素都是通过BP算法不断优化得到。卷积是为了提取输图像的特征,卷积层数较少的神经网络只能从图像中提取简易的特征参数,只有多层的卷积网络才能从低级特征中提取出更复杂的特征参数。卷积的过程也是一个数学计算的过程,在数学中有严谨的推导和计算。假设有矩阵A33和B22 ,A = 123475689 , B = 1234 , 那么B卷积A的结果就是让B在矩阵A上滑动。换言之,就是B与A的所有22连续子矩阵做对于元素积之和的运算。得到

28、结果C = 37476777 , 矩阵B就是上文提到的卷积核或滤波器,矩阵C称为得到的特征图,过程可以定义为窄卷积。如果卷积前先对矩阵A预先进行填充后进行计算的过程称为宽卷积。经过多次卷积后的输出特征图有可能会因为特征向量出现过拟合现象。在深度学习存在过拟合的概念,总结一下就是指在最终训练出的模型会对训练数据完美的匹配,这种模型在实际使用中可能准确率很低,只能对训练数据表现出高的准确率。为了解决过拟合问题可以运用池化层对参数进行优化。池化层一般在卷积层的后面添加,用于压缩参数。主要作用表现在两个方面:一个是保持原图的主要特征,例如有一个88的图片,里面有个数字,可能偏左或者偏右,用22的fil

29、ters将他池化后会变成44的图片,原图的主要特征还会映射在同样的位置。而另一个作用是特征降维,如果一幅图像很大,则需要将冗余的信息去掉并且把主要特征提取出来,这就是特征降维,也是池化最主要的作用。池化的过程也可以用矩阵大致表示出来,假设矩阵C为64的矩阵,池化窗口为22,则按照池化窗口大小将矩阵C分割成6块不相交的22小矩阵,对每个块中的所有元素做求和平均操作,称为平均池化,取最大值则称为最大池化。假如C = 121234345659960078711822 , 则平均池化的结果为1.53.55.54.57.51.5, 最大池化的结果为246982, 由于池化也称为下采样 ,用S = dow

30、n(C)表示,为了使池化层具有可学习性,一般令:S = down(C)+ b 其中和b为标量参数。2.3.7填充图片经过不断的卷积会变得越来越小,需要提取主要的特征就需要多层的卷积,为了不影响与后面全连接层的数据交换,引入填充的概念。可以在每次卷积后对特征图进行0填充或1填充。顾名思义就是在卷积后的特征图周围全部填上0或者1,使卷积后的特征图与原图的大小保持不变。2.3.8全连接层全连接层是将之前卷积池化得到的全部特征参数通过权值矩阵重新组装,因为用到了全部的特征参数所以叫做全连接层。卷积将图像的特征提取出来后,全连接层会将特征进行统一分析归类。举个例子,假如图片中有一只猫,卷积层可以将图片中

31、的猫的各个特征提取出来,相对于其他动物来说比如猫的眼睛比狗的眼睛小,猫的皮毛相对于其他动物的不同,对比了很多个特征以后发现它有猫的眼睛,猫的皮毛和尾巴,然后经过全连接层进行分类得到几个不同的动物,经过比较得出猫的权值最大从而判断图片中的动物为猫。全连接层还有个作用,假设两张不同的图片中都有一只猫,只是猫在图片中的位置不一样,但是经过卷积池化后,经过计算后得到的特征图是一样的,但可能因为特征位置的不同导致分类结果不一样,运用全连接层就能解决这个问题。但是因为空间结构的忽略,导致全连接层不适用于在空间位置上找特点物品的模型,所以要解决非线性的问题需用两次以上的全连接。但是全连接层的数据量很大,约占

32、整个神经网络的70%以上,所以一般都只用2或者3层。2.3.9特征归一化在深度学习中,不同的特征向量具有不同的量纲,会影响到数据的分析结果,为了消除量纲的影响,需要对数据进行标准化处理。原数据经过标准化后,特征指标会处于同一数量级,可以综合对比评价。归一化的目的就是将预处理的数据限定在一定的区间内,从而消除奇异样本数据导致的不良影响。常用的归一化的方法有两种:Min-Max Normalization(最大最小标准化)和Z-score标准化方法。最大最小标准化是将结果映射到0和1之间,适用于数据比较集中的情况,当涉及距离度量和协方差时不适用,用后一种方法处理数据后会使数据符合标准正态分布。这种

33、方法可以处理距离度量和协方差的数据,但是要求原始数据分布近似为高斯分布。2.3.10损失函数与优化器损失函数和优化器是模型里必须有的两个函数,每种函数在keras库里都已经定义好了,只需要把头文件加进去然后调用函数名,写上参数就可以使用。总结一下损失函数和优化器:损失函数又称为目标函数,用于计算预测值与标签值之间的差。而优化器是为了调整学习率和动量。图2.4 损失函数分析图举个模拟线性方程的例子,w1是第一次迭代的权值,而粗线是真实的方程,目的是要经过不断的迭代使w接近真实值。图中的竖线分别是三次迭代后预测的Y与真实Y的差值,在二维数据中可以直接相减得出差值,但是在多维数据就会使用到平方差、均

34、方差等不同的公式计算,这就是损失函数的作用。损失函数也可以用来建立一些准则来衡量决策函数的好坏,然后用所有的训练样本评价决策函数的风险。假设风险函数R()是在已知的训练样本(经验数据)上计算得到,表达式为,需要找到一个值(),使风险函数最小。常见的损失函数有0-1损失函数, 平方损失函数Ly,y=y-fx,2 。而对于分类问题,最常用的就是交叉熵函数,fix,0,1,i=1cfix,=1,fix,相对于真实类别的似然函数,常用最小化处理,最小化负对数似然损失函数就是交叉熵损失函数。优化器的学习率在上文有提到这里不细说,动量在本文调参中不涉及,在实际应用中也比较少,不做细讲。2.3.11 dro

35、pout(正则化)Dropout的作用是在CNN最后的全连接层进行数据的随即丢弃,值得注意的是暂时性的丢弃,在第二次的全连接层可能会被再次暂时丢弃也有可能被按照label进行分类,dropout的使用也是为了防止CNN网络的过拟合。我看过一篇论文专门分析dropout,讲解的很深有很精确的公式验证和说明,其中有个例子可以很生动的说明dropout的过程:在自然界中,进行有性繁殖的动物的后代会从父母双方各继承一半的基因,有性繁殖会将基于不断地拆分重组,从而破坏了大段基于的联合适应性。但是为什么在物竞天择的世界里自然大部分中大型动物都是有性繁殖呢?因为有性繁殖不仅仅可以将优秀的基于传递给下一代,还

36、可以降低基因之间的联合适应性,从而使复杂的一大段基因联合适应性转化成成一段段小基因的联合适应性。就像军队作战时,50个人互相配合进行任务和五个人一组分成十组进行分组行动进行任务的效果会有很多区别,后者的成功的机会会更大。所以dropout也能达到同样的效果,它使神经元和随机挑选出的其他神经元工作,减弱了神经元之间节点的适应性,增强了泛化能力。图2.5 正则化过程示意图2.3.12 BatchNormalizationBatchNormalization简称BN算法,是对输入进行归一化后给到激活函数的,解决了输入发生偏移的影响。运用算法后可以加快训练速度,增大学习率。采用BN算法后可以不使用池化

37、层,因为参数归一化后分布变得明显,经过一个激活函数以后,神经元会自动削弱或者去除一些神经元,就不用再对其进行dropout处理。2.3.13混淆矩阵和ROC曲线混淆矩阵是作为分类的准确度标准,是学习效果进行评估的指标。混淆矩阵含有TN(true negative)、FP(false negative)、FP(false negative)、TP(true positive),比如一个怀孕的女生去做检查,给出结论是怀孕了则是TN(true negative),如果检测结果是没怀孕则是FP(false negative),一个男生去检测结果是怀孕了则是FP(false negative),没怀孕则

38、是TP(true positive)。由这四个参数引申出两个参数-精确率和召回率,精确率(TPR)也称之为查准率,指实际为正样本(TP)的预测结果占总预测为正样本(TP+FP)的比重;召回率(FPR)也称为查全率,指实际为正样本预测(TP)占正确预测结果(TP+FN)的比重。混淆矩阵可以通过使用scikit-learn模块实现。ROC曲线就是由精确率和召回率的点组成,横轴为精确率,纵轴为查准率。ROC曲线下的面积越大代表模型的准确性越高,泛化能力越强。ROC曲线图在11的区间内,中的四个顶点分别代表各种极端:(0,1)表示此时所有正样本都被正确的预测,没有负样本被预测为正样本;(1,0)表此时

39、所有的正样本都被错误的认为是负样本;(0,0)表示此时分类器将所有的样本都判定为负样本;(1,1)表示此时分类器将所有的样本都判定为正样本。2.3.14 epochs与batch_sizebatch_size为批处理长度,在梯度下降法中的的参数更新有两种方法,第一种是计算全部参数的损失函数,进行梯度更新,这种方法叫批梯度下降法。另一种是每遍历一个数据就计算损失函数进行梯度更新,且不需要遍历全部数据,称为随机梯度下降法。前一种方法计算量大,后一种方法收敛性能没那么好,所以采用了折中的方法进行小批量梯度下降,然后分多个批次,减少了随机性和计算量。举个例子:10000个样本,batch_size为1

40、00,则需要迭代10次,此时算训练完一次整个样本,用epoch表示。例如样本为10000,batch_size为100,epoch为5就意味着10000个样本每一次训练完成需要迭代10次,整个模型的搭建要训练5次。2.3.15 training loss与validation loss的关系在模型验证分析时,常用的分析方法之一就是对比training loss 和validation loss函数图像,从而方便对模型的进一步改进。当training loss 下降,validation loss下降,说明神经网络还在学习;当training loss 下降,validation loss不变,

41、说明神经网络过拟合;当training loss 不变,validation loss下降,说明数据集有问题;当training loss 不变,validation loss不变,说明停止学习,需要减小学习率;当training loss 上升,validation loss上升,说明超参数设置不当,数据集有问题。3基于卷积神经网络的人脸表情识别3.1引言总结完自然神经网络和卷积神经网络中基础的概念和知识点后,将在这一小节进行用卷积神经网络架构的AlexNet进行模型搭建和分析。3.2数据的预处理在进行模型搭建前,数据的处理是最繁琐也是最重要的,因为只要你懂得神经网络的各种原理,在模型搭建好

42、后可以由计算机自己计算分析,不需要人为的干涉它。但是计算机处理的数据需要人为得给它,而且不能有脏数据等,所以对数据的预处理很重要。本设计用的数据是kaggle的fer2013数据集, 数据集不是一张张图片而是将数据保存到csv文件中,所以可以运用panda的函数进行数据读取也可以直接转换成图片识别。数据集中分为训练集、测试集和验证集。文件中的label由0-7组成,分别代表着:0(愤怒)、1(厌恶)、2(恐惧)、3(开心)、4(伤心)、5(惊讶)、6(中性)等七种表情。其中训练集具有28708张图片,测试集具有3589张图片,验证集具有3589张图片,图片大小都为48481。本文会在附录会给出

43、下载地址。3.3图片的转换首先将文件转化为.csv格式,这样才能用python对数据进行批量处理。需要根据label分成三个.csv文件,分别代表训练集、测试集和验证机,用database_path加文件路径获取文件内的数据。这里需要提一下因为用的是有监督学习。机器学习分为有监督学习和无监督学习,有监督学习和无监督学习的区别在于训练数据中有没有带有标签(label),大部分的卷积神经网络都是采用有监督的学习,事先为每组数据每张图片打上标签,分好类型然后让机器学习;无监督学习的数据不含有label,适用于增强学习等其他神经网络。因为带有标签,需要把label给到中间变量然后删去再将数据进行转化变

44、成图片。图3.1 去除label的过程展示然后将去掉标签后的数据打开,然后根据每一个像素点的灰度值转化为4848的图片。图3.2 转化成图片的过程展示效果展示:(a)(b)图3.3 转化后效果展示3.4搭建模型首先定义图像的长和宽,目的是告诉网络输入图像矩阵的大小(48481),确认图像的通道分量,便于搭建网络结构。图3.4 模型搭建示意图1然后开始定义网络结构,首先先建立一个model,然后开始添加卷积层、激活函数、池化层。图3.5 模型搭建示意图2搭建的原始模型中第一层卷积层用的是32个55的卷积核进行原始图像的特征提取,没有写步长默认为1,采用0填充,使用relu做激活函数,然后再之后构

45、建一个kernel size 为3*3的池化层,步长为2。第三层用32个44的卷积核进行第二次卷积,采用0填充,使用relu做激活函数。第四层构建一个kernel size 为 3*3的池化层,步长为2;第五层为64个55的卷积核进行第三次卷积,第六层构建一个kernel size 为3*3的池化层,步长为2。然后添加全连接层,需要先将feature map转成n*1的一维网络。第一层全连接层长度为2048,激活函数为relu,然后正则化百分之40的特征参数。再构建第二层的全连接层,长度为2048,激活函数为relu,正则化百分之40的特征参数。然后添加一层BatchNormalization

46、,最后将全连接层的特征参数按label分为7类,激活函数采用sigmoid。然后就是选择优化器和损失函数,优化器选择的是SGD(随机梯度下降)也叫增量梯度下降,是对随机样本进行更新,at+1= at- R(t;xt, yt(xt, yt)是t次迭代选取的样本。学习率为0.005,损失函数用的是categorical_crossentropy。这时模型搭建完毕,可以用训练数据进行模型训练了。先对图片集进行读取,然后设置epochs和batch_size,将训练数据、测试数据和验证数据进行标准化,class_mode要选用binary,因为是多分类问题。图3.6 模型搭建示意图3最后用model.fit开始model的训练。3.5直接用.csv文件中的数据进行模型搭建与训练一开始是使用.csv数据文件中的数据

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁