基于某某神经网络地人脸识别(附代码)

上传人:博****1 文档编号:487830206 上传时间:2023-12-18 格式:DOC 页数:12 大小:381.50KB
返回 下载 相关 举报
基于某某神经网络地人脸识别(附代码)_第1页
第1页 / 共12页
基于某某神经网络地人脸识别(附代码)_第2页
第2页 / 共12页
基于某某神经网络地人脸识别(附代码)_第3页
第3页 / 共12页
基于某某神经网络地人脸识别(附代码)_第4页
第4页 / 共12页
基于某某神经网络地人脸识别(附代码)_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于某某神经网络地人脸识别(附代码)》由会员分享,可在线阅读,更多相关《基于某某神经网络地人脸识别(附代码)(12页珍藏版)》请在金锄头文库上搜索。

1、word【代码与说明见第四页】基于三层BP神经网络的人脸识别一、 实验要求采用三层前馈BP神经网络实现标准人脸YALE数据库的识别。二、BP神经网络的结构和学习算法实验中建议采用如下最简单的三层BP神经网络,输入层为,有n个神经元节点,输出层具有m个神经元,网络输出为,隐含层具有k个神经元,采用BP学习算法训练神经网络。BP神经网络的结构BP网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的准确的数学表达式,只要用的模式对BP网络加以训练,网络就具有输入输出对之间的映射能力。BP网络执行的是有教师训练,其样本集是由形如输入向量,期望输出向

2、量的向量对构成的。在开始训练前,所有的权值和阈值都应该用一些不同的小随机数进展初始化。BP算法主要包括两个阶段:(1) 向前传播阶段从样本集中取一个样本(Xp,Yp),将Xp输入网络,其中Xp为输入向量,Yp为期望输出向量。计算相应的实际输出Op。在此阶段,信息从输入层经过逐级的变换,传送到输出层。这个过程也是网络在完成训练后正常运行时执行的过程。在此过程中,网络执行的是如下运算:(2) 向后传播阶段计算实际输出Op与相应的理想输出Yp的差;按极小化误差的方法调整权矩阵。这两个阶段的工作一般应受到精度要求的控制,定义 (1)作为网络关于第p个样本的误差测度误差函数。而将网络关于整个样本集的误差

3、测度定义为 (2)如前所述,将此阶段称为向后传播阶段,也称之为误差传播阶段。为了更清楚地说明本文所使用的BP网络的训练过程,首先假设输入层、中间层和输出层的单元数分别是N、L和M。X=(x0,x1,xN-1)是加到网络的输入矢量,H=(h0,h1,hL-1)是中间层输出矢量,Y=(y0,y1,yM-1)是网络的实际输出矢量,并且用D=(d0,d1,dM-1)来表示训练组中各模式的目标输出矢量。输出单元i到隐单元j的权值是Vij,而隐单元j到输出单元k的权值是Wjk。另外用k和j来分别表示输出单元和隐单元的阈值。于是,中间层各单元的输出为: (3)而输出层各单元的输出是: (4)其中f(*)是激

4、励函数,采用S型函数: (5)在上述条件下,网络的训练过程如下:(1) 选定训练集。由相应的训练策略选择样本图像作为训练集。(2) 初始化各权值Vij,Wjk和阈值j,k,将其设置为接近于0的随机值,并初始化精度控制参数和学习率。(3) 从训练集中取一个输入向量X加到网络,并给定它的目标输出向量D。(4) 利用式(7)计算出一个中间层输出H,再用式(8)计算出网络的实际输出Y。(5) 将输出矢量中的元素yk与目标矢量中的元素dk进展比拟,计算出M个输出误差项:对中间层的隐单元也计算出L个误差项:(6) 依次计算出各权值和阈值的调整量: (6) (7) (8) (9)(7) 调整权值和阈值:,(

5、8) 当k每经历1至M后,判断指标是否满足精度要求:E,其中E是总误差函数,且。如果不满足,就返回(3),继续迭代。如果满足,就进入下一步。(9) 训练完毕,将权值和阈值保存在文件中。这时可以认为各个权值已经达到稳定,分类器形成。再一次进展训练时,直接从文件导出权值和阈值进展训练,不需要进展初始化。BP算法流程图YALE数据库是由耶鲁大学计算视觉与扼制中心创立,包括15位志愿者,每个人有11X不同姿势、光照和表情的图片,共计165X图片,图片均为80*100像素的BMP格式图像。我们将整个数据库分为两个局部,每个人的前5幅图片作为网络的训练使用,后6副图片作为测试使用。说明:程序的输入数据可以

6、从这里下载:: s:/pan.baidu./s/1aAHGyg0sFH1PYdY4XekyTQ 密码: vsfb如果不能下载了, 可以自己找找YALE人脸数据库。先运行read_can_use.m 读取图片的像素值,使用奇异值分解的方法得到对应的特征。程序预设了只读取前5个人的人脸图片,可以自己改成最多15个人。然后运行main_can_use.m ,程序会输出1 1 2 3 2 3,每个数字代表一X图片最有可能的识别类别就是人的编号。对每个人的11X图片,取前7X训练网络,后4X测试网络,取前5个人进展实验。所以共有35个训练样本,20个测试样本。比如输出的结果是 1 1 1 1 2 2 1

7、 2 3 3 3 3 .,因为每4个数字是属于同一个人的,前四个都是1如此都预测正确,第二组的4个数字2 2 1 2 中的那个1就是预测错误本来是2预测成了1。由于参数的随机初始化,不保证每次的结果都一样。function main()%clcclear all;%close all;load(date1_5.mat,feature);warning off allSamNum=35; %输入样本数量TestSamNum=35; %测试样本数量ForcastSamNum=20; %预测样本数量HiddenUnitNum=8; %中间层隐节点数量取8InDim=40; %网络输入维度OutDim

8、=4; %网络输出维度%inputp=;t=;pnew=;for i=1:55 if(mod(i,11)0) p=p;feature(i,:); else pnew=pnew;feature(i,:); endendp=p;pnew=pnew;%outputs1=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;s2=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ;s3=0 0 0 0 0 0 0 1 1 1

9、1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ;s4=1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ;t=s1;s2;s3;s4;size(t) %4*35 输出size(p) %40*35 输入SamIn,minp,maxp,tn,mint,maxt=premnmx(p,t); %原始样本对输入和输出初始化rand(state,sum(100*clock) %依据系统时钟种子产生随机数SamOut=tn;TestSamIn=SamIn; %这里取

10、输入样本与测试样本一样因为样本容量偏少TestSamOut=SamOut; %也取输出样本与测试样本一样MaxEpochs=50000; %最多训练次数为50000E0=0.65*10(-3); %目标误差为0.65*10(-3)W1=0.5*rand(HiddenUnitNum,InDim)-0.2; %初始化输入层与隐含层之间的权值B1=0.5*rand(HiddenUnitNum,1)-0.2; %初始化输入层与隐含层之间的阈值W2=0.5*rand(OutDim,HiddenUnitNum)-0.2; %初始化输出层与隐含层之间的权值B2=0.5*rand(OutDim,1)-0.2;

11、 %初始化输出层与隐含层之间的阈值ErrHistory=; %给中间变量预先占据内存for i=1:MaxEpochs % HiddenOut=logsig(W1*SamIn+repmat(B1,1,SamNum); % 隐含层网络输出 HiddenOut=1./(1+exp(-(W1*SamIn+repmat(B1,1,SamNum); % 隐含层网络输出 NetworkOut=W2*HiddenOut+repmat(B2,1,SamNum); % 输出层网络输出 Error=SamOut-NetworkOut; % 实际输出与网络输出之差 SSE=sumsqr(Error) ; %能量函数

12、误差平方和 ErrHistory=ErrHistory SSE; if SSEE0,break, end % 调整权值阈值 Delta2=Error; Delta1=W2*Delta2.*HiddenOut.*(1-HiddenOut); dW2=Delta2*HiddenOut; dB2=Delta2*ones(SamNum,1); dW1=Delta1*SamIn; dB1=Delta1*ones(SamNum,1); %对输出层与隐含层之间的权值和阈值进展修正 W2=W2+lr*dW2; B2=B2+lr*dB2; %对输入层与隐含层之间的权值和阈值进展修正 W1=W1+lr*dW1;

13、B1=B1+lr*dB1;endHiddenOut=1./(1+exp(-(W1*SamIn+repmat(B1,1,TestSamNum); % 隐含层输出最终结果NetworkOut=W2*HiddenOut+repmat(B2,1,TestSamNum); % 输出层输出最终结果a=postmnmx(NetworkOut,mint,maxt); % 复原网络输出层的结果% 利用训练好的网络进展预测pnewn=tramnmx(pnew,minp,maxp); %归一化;HiddenOut=1./(1+exp(-(W1*pnewn+repmat(B1,1,ForcastSamNum);anewn=W2*HiddenOut+repmat(B2,1,ForcastSamNum); % 输出层输出预测结果%把网络预测得到的数据复原为原始的数量级;

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

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号