基于神经网络的人脸识别(附代码)
基于模糊混沌神经网络的人脸识别算法

第2 8卷 第 6期
20 0 8年 6 月
文 章 编 号 :0 1 9 8 (0 8 0 10 — 0 1 20 )6—14 59—0 3
计 算机应 用
Co u e mp t rApp iai n l t s c o
Vo . 8 No 6 12 .
一
神经 网络 设计 , 应用模 糊 R F网络进行人 脸识别 , B 结合 了模 糊函数和神经 网络 的各 自优点 , 得到 了较满意 的实验结果 。 本文提出一种基于模糊 混沌 神经 网络 的算 法 , 并应用 到 人脸识别 中。将混沌理论 引入神经 网络 的构 造 , 利用 混沌 对 初值 的极端敏感依赖性 , 从而可 能对仅 有微小差 别的模式 进
Ab t a t o t s n i v e e d n e w t h n t lv u ,c a sc n b p l d t h a tr e o n t n o e o e s r c :F r i e st ed p n e c i t e I i a a e h o a ea p i t e p t n r c g i o ft n s s i h i l e o e i h w t xr mey s l d f r n e n a g r h b s d o h o i e r l ew r a r p s d a d u e r a e rc g i o .F r i et h e l ma l i e c .A loi m a e n c a t n u a t o k w sp o o e n s d f c e o n t n fe t c n of i o
P N h nj n.G O Wa —ig A G C u -ag A nqn i
人脸朝向识别

基于BP网络的人脸朝向识别模型问题重述:人脸朝向识别是人脸应用研究中重要的一步,在众多研究领域中,人脸朝向识别是一个无法回避的问题。
现有一组人脸朝向不同角度时的图像数据,图像来自不同的10个人(详见附件),每人五幅图像,人脸的朝向分别为:左方、左前方、前方、右前方和右方,如图1所示。
图1 人脸图像试建立人脸朝向识别模型,对人脸的朝向进行识别。
1.问题的背景:人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。
广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,如人脸图像采集、人脸定位、人脸识别预处理、身份确认及身份查找等; 而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
人工神经网络对人脸识别的研究也越来越广泛。
人工神经网络是一个非线性的有向图, 图中含有可以通过改变权大小来存放模式的加权边,并且可以从不完整的或未知的输入找到模式。
人工神经网络系统自诞生以来, 由于它固有的自学习、自适应、自组织和大规模并行处理能力, 以及具有信息的分布存储、并行处理意见自学能力等优点, 已经在信息处理、模式识别、智能控制、系统建模、系统辨识及优化等领域得到越来越广泛的应用。
尤其是基于误差反向传播算法的多层前馈网络(简称BP网络) , 可以以任意精度逼近任意的连续函数, 所以广泛应用于非线性建模、函数逼近、模式分类等方面。
可以说, BP 网络是人工神经网络中前向网络的核心内容, 体现了人工神经网络精华的部分。
一个具有r个输入和一个隐含层的神经网络模型结构如图3所示。
图3 具有一个隐含层的神经网络模型结构图BP网络的产生归功于BP算法的获得。
BP算法属于δ算法,是一种监督式的学习算法。
其主要思想为:对于q个输入学习样本:P1,P2,……P q,已知与其对应的输出样本为:T1,T2,……T q。
学习的目的是用网络的实际输出A1,A2,……A q,与目标矢量T1,T2,……T q,之间的误差来修改其权值,使A l,(l=l,2…,q)与期望的T l尽可能地接近;即:使网络输出层的误差平方和达到最小。
基于EMBP情感神经网络的人脸识别算法研究

为 了测 试 训 练 样 本 个 数 对 E MB P神 经 网络 性 能 的 影 响 , 逐
再 利 用 前 面 推 导 的权 值 修 正 公 式 对 E MB P 网络 进 行 权 值 调 整 , 直 到 满 足 设 定 的迭 代 步 数 或 精度 要 求 为 止 ; 7 ) 将 测 试 库 中人 脸 图像 进 行 预 处 理 后进 行 奇 异 值 分 解 , 对 奇 异 值 特 征 向量 进 行 归一 化 处 理 和 奇 异 值 特 征 向 量 重 排 后 作 为 训 练好 的 E MB P网络 输 入 信 号 , 计 算 其 输 出并 作 出 分 类 判 决 。
平均识别率接近 1 0 0 % , 由此 可 以说 明 ,为 了提 高 系 统 的识 别
率, 可 以通 过 增 加 训 练 样 本 数 量来 达到 。
对 每 幅人 脸 图像 进 行 预 处 理 后 进 行 奇 异 值 分 解 ,对 奇 异 值 特 征 向量 进 行 归 一 化 与 奇 异 值 重 新 排 列 ,得 到 人 脸 图像 的 特 征 向量 。 表 1和 表 2列 出部 分 图像 的部 分 奇 异 值 , 其 中 表 1为 第 一
渐 增 加 每 类 参 与 训 练 的样 本 个 数 , 测试样本数量对应减少 , 同 时
保持奇异值特征个数 为 1 5不变 , 测试结果如 图 5所示 。从 图 5
中可 以看 出 , 在奇异值特征个数保持不变前提下 , 随着 参 与 训 练 样本数增加 , 系统 的识 别 率 逐 渐 提 高 , 特 别 是 当参 与训 练 的 每 类 样 本 数 达 到 9个 时 ( 每 类 测 试 样 本 均 为 1个 ) , 经过多次测试 , 其
基于python的人脸识别系统毕业设计

《基于 Python 的人脸识别系统毕业设计》摘要:本毕业设计旨在设计并实现一个基于Python 的人脸识别系统。
通过对人脸识别相关技术的研究与应用,构建了一个具备一定性能的人脸识别模型。
系统采用了先进的图像处理算法和深度学习方法,能够实现对人脸图像的准确识别和分类。
本文详细介绍了系统的设计思路、关键技术、实现过程以及实验结果与分析,展示了该人脸识别系统在实际应用中的潜力和可行性。
一、概述随着科技的不断发展,人脸识别技术在安防、金融、交通等众多领域展现出了巨大的应用价值。
人脸识别系统能够快速、准确地识别人的身份,为人们的生活和工作带来了极大的便利。
本毕业设计基于Python 编程语言,致力于开发一个具有较高性能的人脸识别系统,以满足实际应用的需求。
二、人脸识别系统的相关技术(一)人脸检测技术人脸检测是人脸识别系统的基础,其目的是在图像或视瓶中检测出人脸的位置和大小。
常用的人脸检测方法包括基于特征的方法和基于深度学习的方法。
基于深度学习的方法如卷积神经网络(CNN)具有较高的检测准确率和鲁棒性,在实际应用中得到了广泛的应用。
(二)特征提取技术特征提取是从人脸图像中提取出能够表征人脸身份的特征向量的过程。
传统的特征提取方法如主成分分析(PCA)、线性判别分析(LDA)等,虽然在一定程度上能够提取特征,但效果有限。
近年来,深度学习中的卷积神经网络能够自动学习到深层次的人脸特征,具有更好的性能。
(三)人脸识别算法人脸识别算法是将提取的特征向量进行比对和匹配,以确定人脸的身份。
常见的人脸识别算法包括基于欧式距离的算法、基于余弦相似度的算法等。
在本毕业设计中,采用了基于卷积神经网络的人脸识别算法,通过训练模型来学习人脸特征的映射关系。
三、系统的总体设计(一)系统架构本人脸识别系统采用了分层的架构设计,包括数据采集层、图像处理层、特征提取与识别层、用户界面层等。
数据采集层负责获取人脸图像数据;图像处理层对图像进行预处理,如灰度化、归一化等;特征提取与识别层利用训练好的模型进行特征提取和识别;用户界面层提供友好的人机交互界面,方便用户进行操作和管理。
基于Kinect的3D人脸识别(1)

基于kinect的3D人脸识别技术摘要在2D人脸识别技术不断发展的今天,深度学习的出现让2D人脸识别技术的准确率已经达到了97.54%,2D技术的发展空间越来越小。
而随着3D技术也越来越成熟,将3D技术融合到人脸识别技术中是一种新的发展方向。
而现阶段,kinect这种体积轻巧,价格便宜,捕获3D数据效率高而且分辨率不低的设备成了许多研究人员的研究对象。
在本文中我们也利用了kinect设备完成了一个基于kinect的3D人脸识别研究的过程。
首先通过kinect设备采集了一批数据,接着实现了一种基于熵图和显著性图,利用HOG特征算子,和随机森林分类器和SVM分类器进行识别的算法系统。
通过我们的实验,利用随机森林分类器实现的分类器准确率只有73%,而利用SVM分类器达到的准确率有83.19%。
但是因为采集数据的范围小,以及算法的不完善性,我们的系统还有很大的提升空间。
关键词:kinect,RGB-D,显著性,熵图,随机森林,SVM,人脸识别AbstractWith the fast development of the face recognition based 2D data, the deep learning technology makes the accuracy of the face recognition based 2D data have reached in 97.54% and the development of the 2D technology in face recognition has reached the bottleneck. However, with the 3D technology becoming more and more mature, it is a new development direction to fuse the 3D technology into face recognitiontechnology. In the meanwhile, the Kinect which is portable, inexpensive and has high capturing rate and moderate definition becomes the research object of many researchers.In our paper, we used the Kinect equipment to finish a project which is about face recognition based 3D data. First of all, we collected enough RGB-D data using Kinect. Then we implemented the algorithm system which is based the entropy map and the visual saliency map, gets the feature vector using the HOG descriptor and using random decision forest and support vector machine to classify the data.The result of our experiment is not very well. The accuracy of the recognition with random decision forest classifier reaches only 73%. However, the accuracy of the recognition with support vector machine reaches 83.19%. Because of the small scale in the database and the imperfect algorithm, our system can still make great progress.Key words:Kinect, RGB-D, salience, entropy, RDF, SVM, face recognition1,绪论1.1研究背景随着人们对人工智能,机器学习算法的研究的不断深入,其分支领域中的计算机视觉中的人脸识别技术也得到了充分的发展和巨大的进步。
基于C语言的人脸识别系统

基于C语言的人脸识别系统人脸识别技术是一种通过计算机对人脸图像进行特征提取和匹配,从而实现对人脸进行身份鉴别和认证的技术。
在现代社会中得到了广泛的应用,如门禁系统、手机解锁等多个领域。
本文将介绍基于C语言开发的人脸识别系统的原理和实现方法。
一、人脸识别系统的原理人脸识别系统的原理主要包括图像获取、人脸检测、特征提取和识别匹配四个主要步骤。
1. 图像获取图像获取是指通过摄像头或者其他设备获取到待识别的人脸图像。
在C语言中,可以通过调用图像处理库的相关函数来实现图像的读取和显示。
2. 人脸检测人脸检测是指通过算法对图像进行处理,找出其中的人脸区域。
常用的人脸检测算法包括Haar特征检测、卷积神经网络等。
3. 特征提取特征提取是指从人脸图像中提取出表征该人脸的特征信息。
常用的特征提取方法有主成分分析(PCA)、线性判别分析(LDA)等。
4. 识别匹配识别匹配是指将提取到的特征信息与存储的人脸数据库中的特征信息进行比对,找出最匹配的结果。
匹配算法常用的有欧氏距离、余弦相似度等。
二、基于C语言的人脸识别系统的实现方法1. 图像处理库的选择在C语言中,可以使用开源的图像处理库OpenCV来实现人脸识别系统。
OpenCV是一个跨平台的计算机视觉库,提供了许多用于图像处理的函数和工具。
2. 数据集的收集为了训练人脸识别系统,首先需要收集一定数量的人脸图像数据集。
可以通过调用摄像头,让用户自行拍摄不同角度、不同表情的人脸图像。
3. 数据预处理收集到的人脸图像需要进行预处理,包括图像裁剪、尺寸调整、灰度化等操作,以便后续的人脸检测和特征提取。
4. 人脸检测与特征提取调用OpenCV库中的相关函数,对预处理后的人脸图像进行人脸检测和特征提取操作。
根据选定的算法,提取出人脸图像的特征信息,并存储起来供后续的识别匹配使用。
5. 识别匹配对于待识别的人脸图像,同样进行与第四步相同的人脸检测和特征提取操作。
然后将提取到的特征信息与存储的人脸数据库中的信息进行匹配,找出最相似的结果。
基于PCA和神经网络的人脸识别算法研究

基于PCA和神经网络的人脸识别算法研究作者:唐赫来源:《软件导刊》2013年第06期摘要:在MATLAB环境下,取ORL人脸数据库的部分人脸样本集,基于PCA方法提取人脸特征,形成特征脸空间,然后将每个人脸样本投影到该空间得到一投影系数向量,该投影系数向量在一个低维空间表述了一个人脸样本,这样就得到了训练样本集。
同时将另一部分ORL人脸数据库的人脸作同样处理得到测试样本集。
然后基于最近邻算法进行分类,得到识别率,接下来使用BP神经网络算法进行人脸识别,最后通过基于神经网络算法和最近邻算法进行综合决策,对待识别的人脸进行分类。
关键词:人脸识别;主成分;BP神经网络;最近邻算法中图分类号:TP311文献标识码:A文章编号:1672-7800(2013)006-0033-02作者简介:唐赫(1989-),女,武汉理工大学理学院统计系硕士研究生,研究方向为人脸图像识别、遥感图像、统计预测决策。
0引言特征脸方法就是将人脸的图像域看作是一组随机向量,可以从训练图像中,通过主元分析得到一组特征脸图像,任意给定的人脸图像都可以近似为这组特征脸图像的线性组合,用组合的系数作为人脸的特征向量。
识别过程就是将人脸图像映射到由特征脸组成的子空间上,比较其与已知人脸在特征脸空间中的位置。
经典的特征脸方法是采用基于欧氏距离的最近中心分类器,比较常用的是基于欧氏距离的最近邻。
1算法流程(1)读入人脸库。
每个人取前5张作为训练样本,后5张为测试样本,共40人,则训练样本和测试样本数分别为N=200。
人脸图像为92×112维,按列相连就构成N=10 304维矢量x-j,可视为N维空间中的一个点。
(2)构造平均脸和偏差矩阵。
(3)计算通(4)计算训练样本在特征脸子空间上的投影系数向量,生成训练集的人脸图像主分量allcoor-200×71。
(5)计算测试样本在特征脸子空间上的投影系数向量,生成测试集的人脸图像主分量tcoor-200×71。
基于BP网络的人脸朝向识别模型

B 算 法采 取梯度 下 降法调 整权值 P
( + ) () r j, 刀 1= ” +l x’ S
式 中 , 本节 点 的序 号 , 隐含 层 或输 入 层 节 i 为 i 是
点 的序号 。 i 节点i x是 的输 出或者是 外部 输入 ; 为学 1 1
0 60 ; 6 0 4
摘要 : 本文基于B 神经网络建立数学模型解决人脸朝向识别这一重要问题。通过对图片压缩、 P 标准化处理等
步 骤 , 立 了 一个 全 新 的B 神 经 网络 。并 用 MA L B 5 张 图片 进 行 了实 验 , 验 结 果 表 明 , 建 P TA 对 0 实 该方 法识 别 准 确率 高 、 识别 过程 速 度 快 。 最后 , 们 就 训 练样 本 数 目的确 定 与 更 有 效识 别方 法 的探 索 两 个 方 面 对 模 型 提 出 了改 进 。 我
关 键 词 :P B 神经 网络 ; 人脸朝 向识别 ; 主成分分析
中 图法 分 类 号 :P 9 .1 T 31 4 文 献 标 识 码 : A D I 1. 6/i n1 0 — 2 0 0 20 . O :03 9js . 10 7 . 1 .1 5 9 .s 0 2 0
Fa e Ore ato Re o ii n Ba e n c int i n c gn to s d o BP ur lNe wo k Ne a t r W U -we Yu n ,CHEN e Ch n ,KANG e ha W n- o
的信 息 。 进一 步处理 后 , 成一 次学 习 的正 向传 播 经 完
处理 过程 , 由输 出层 向外界输 出信 息处 理结果 。 当实 际输 出与期 望输 出不 符 时 ,进入 误差 的反 向传播 阶 段 。 差通 过输 出层 , 误 按误差 梯度 下降 的方式 修正 各
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【代码及说明见第四页】基于三层BP 神经网络的人脸识别一、 实验要求采用三层前馈BP 神经网络实现标准人脸YALE 数据库的识别。
二、BP 神经网络的结构和学习算法实验中建议采用如下最简单的三层BP 神经网络,输入层为],,,[21n x x x X ,有n 个神经元节点,输出层具有m 个神经元,网络输出为],,,[21m y y y Y ,隐含层具有k 个神经元,采用BP 学习算法训练神经网络。
BP 神经网络的结构BP 网络在本质上是一种输入到输出的映射,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对BP 网络加以训练,网络就具有输入输出对之间的映射能力。
BP 网络执行的是有教师训练,其样本集是由形如(输入向量,期望输出向量)的向量对构成的。
在开始训练前,所有的权值和阈值都应该用一些不同的小随机数进行初始化。
BP 算法主要包括两个阶段: (1) 向前传播阶段①从样本集中取一个样本(X p ,Y p ),将X p 输入网络,其中X p 为输入向量,Y p 为期望输出向量。
②计算相应的实际输出O p 。
在此阶段,信息从输入层经过逐级的变换,传送到输出层。
这个过程也是网络在完成训练后正常运行时执行的过程。
在此过程中,网络执行的是下列运算: (1)(2)()21(...((())...))n p n p O F F F X W W W(2) 向后传播阶段①计算实际输出O p 与相应的理想输出Y p 的差; ②按极小化误差的方法调整权矩阵。
这两个阶段的工作一般应受到精度要求的控制,定义211()2mp pj pj j E y o (1)作为网络关于第p 个样本的误差测度(误差函数)。
而将网络关于整个样本集的误差测度定义为p E E (2)如前所述,将此阶段称为向后传播阶段,也称之为误差传播阶段。
为了更清楚地说明本文所使用的BP 网络的训练过程,首先假设输入层、中间层和输出层的单元数分别是N 、L 和M 。
X=(x 0,x 1,…,x N-1)是加到网络的输入矢量,H=(h 0,h 1,…,h L-1)是中间层输出矢量,Y=(y 0,y 1,…,y M-1)是网络的实际输出矢量,并且用D=(d 0,d 1,…,d M-1)来表示训练组中各模式的目标输出矢量。
输出单元i 到隐单元j 的权值是V ij ,而隐单元j 到输出单元k 的权值是W jk 。
另外用θk 和Φj 来分别表示输出单元和隐单元的阈值。
于是,中间层各单元的输出为:10()N j ij i j i h f V x (3)而输出层各单元的输出是:10()L k jk j k j y f W h (4)其中f(*)是激励函数,采用S 型函数:1()1xf x e (5)在上述条件下,网络的训练过程如下:(1) 选定训练集。
由相应的训练策略选择样本图像作为训练集。
(2) 初始化各权值V ij ,W jk 和阈值Φj ,θk ,将其设置为接近于0的随机值,并初始化精度控制参数ε和学习率α。
(3) 从训练集中取一个输入向量X 加到网络,并给定它的目标输出向量D 。
(4) 利用式(7)计算出一个中间层输出H ,再用式(8)计算出网络的实际输出Y 。
(5) 将输出矢量中的元素y k 与目标矢量中的元素d k 进行比较,计算出M 个输出误差项:()(1)k k k k k d y y y 对中间层的隐单元也计算出L 个误差项:1*0(1)M Jj j k jk k h h W(6) 依次计算出各权值和阈值的调整量:()(/(1))*((1)1)**jk jk k j W n L W n h (6)*()(/(1))*((1)1)**ij ij j iV n N V n x (7) ()(/(1))*((1)1)*k k k n L n (8)*()(/(1))*((1)1)*j j jn L n (9) (7) 调整权值和阈值:(1)()()jk jk jk W n W n W n ,(1)()()ij ij ij V n V n V n(1)()()k k k n n n ,(1)()()j j n n n(8) 当k 每经历1至M 后,判断指标是否满足精度要求:E ≤ε,其中E 是总误差函数,且1201()2M k k k E d y 。
如果不满足,就返回(3),继续迭代。
如果满足,就进入下一步。
(9) 训练结束,将权值和阈值保存在文件中。
这时可以认为各个权值已经达到稳定,分类器形成。
再一次进行训练时,直接从文件导出权值和阈值进行训练,不需要进行初始化。
BP 算法流程图YALE 数据库是由耶鲁大学计算视觉与扼制中心创立,包括15位志愿者,每个人有11张不同姿势、光照和表情的图片,共计165张图片,图片均为80*100像素的BMP 格式图像。
我们将整个数据库分为两个部分,每个人的前5幅图片作为网络的训练使用,后6副图片作为测试使用。
说明:程序的输入数据可以从这里下载:链接: https:///s/1aAHGyg0sFH1PYdY4XekyTQ 密码: vsfb如果不能下载了,可以自己找找YALE人脸数据库。
代码分为read_can_use.m和main_can_ues.m先运行read_can_use.m 读取图片的像素值,使用奇异值分解的方法得到对应的特征。
程序预设了只读取前5个人的人脸图片,可以自己改成最多15个人。
然后运行main_can_use.m ,程序会输出1 1 2 3 2 3,每个数字代表一张图片最有可能的识别类别(就是人的编号)。
对每个人的11张图片,取前7张训练网络,后4张测试网络,取前5个人进行实验。
所以共有35个训练样本,20个测试样本。
比如输出的结果是1 1 1 1 2 2 1 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=4; %网络输出维度%%inputp=[];t=[];pnew=[];for i=1:55if(mod(i,11)<=7&&mod(i,11)>0)p=[p;feature(i,:)];elsepnew=[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 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; %这里取输入样本与测试样本相同因为样本容量偏少TestSamOut=SamOut; %也取输出样本与测试样本相同MaxEpochs=50000; %最多训练次数为50000lr=0.035; %学习速率为0.035E0=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; %初始化输出层与隐含层之间的阈值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) ; %能量函数(误差平方和)ErrHistory=[ErrHistory SSE];if SSE<E0,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;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); % 输出层输出预测结果%把网络预测得到的数据还原为原始的数量级;anew=postmnmx(anewn,mint,maxt);answer=zeros(1,size(anew,2));d=1;for j=1:20for i=4:-1:1answer(j)=answer(j)+anew(i,j)*d;d=d*2;endd=1;endanswer=answer+0.5;answer=floor(answer)function [feature] = read_can_use()clc,clear;%%for i=1:5for jj=1:11%%s1='YALE\subject0';s2=int2str(i);s22='_';s222=int2str(jj);s3='.bmp';str=strcat(s1,s2);str=strcat(str,s22);str=strcat(str,s222);str=strcat(str,s3);a2=imread(str);M=double(a2);%%num=1;for j=1:10for k=1:4x=i;%将图片的灰度矩阵划分成32块小矩阵temp_num1=size(M,1)./10;%100*80temp_num2=size(M,2)./4;temp=M((j-1)*temp_num1+1:j*temp_num1,(k-1)*temp_num2+1:k*temp_num2);%对每个小矩阵进行SVD变换[u,temp1,v]=svd(temp);%提取最大的SVD系数作为特征值temp2=temp1(num,num);%得到所有图片的特征矩阵feature((x-1)*11+jj,(j-1)*4+k)=temp2;endendendendsave('date1_5','feature');。