机器学习课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、神经网络BP算法介绍
引言人工神经网络(Artificial Neural Networks,ANN)提供了一种普遍而且实用的方法从样例中学习值为实数、离散值或向量的函数。像方向传播(BACKPTPAGATION)这样的算法,实用梯度下降来调节网络参数以最佳拟合由输入-输出对组成的训练集合。ANN学习对于训练数据中的错误健壮性很好,且已成功地应用到很多领域。例如,本文将要描述的反向传播算法已在很多实际的问题中取得惊人的成功,比如学习识别人脸。
(一)神经网络表示
Pomeleau(1933)的ALVINN系统是ANN学习的一个典型实例,这个系统使用一个学习到的ANN以正常的速度在高速公路上驾驶汽车。ANN的输入是一个30*32像素的网格,像素的亮度来自一个安装在车辆上的前向摄像机。ANN的输出是车辆行进的方向。ALVINN 用学习到的网络在高速公路上以70英里时速成功地驾驶了90英里。
书上图4-1
ALVINN系统使用反向传播算法来学习驾驶汽车。左图显示了来自车前摄像机的图像是如何被映射到960个神经网络输入的,这些输入又前馈到4个隐藏单元,再连接到30个输出单元,每个输出单元对应一个特定的驾驶方向,这些单元的输出值决定哪一个驾驶方向被最强烈推荐(即该方向权值最大)。
(二)BP算法权值及阈值调整公式
(三)matlab神经网络工具箱
(四)BP算法应用于人脸识别
本章将讲解如何运用BP算法建立人脸识别系统
实验中我们使用了ORL数据库(Olivetti Research Laboratory in Combridge, UK 可从HTU /facedatabase.htmlUT H获得),部分图像如5.1所示。它包含了400张不同的人脸图像,40个不同的实验者每人10张。对其中一些实验者,图像是在不同的时间、变化的光线、面部表情(张开/合拢眼睛、微笑/不微笑)和面部细节(戴眼镜/不戴眼镜)下拍摄的。所有的图像为实验者的正脸,带有一定程度的朝上下左右的偏转或倾斜,有相似的黑暗同质背景。每幅图象的大小为112 92像素8bit的灰度图。为了进行比较,它们被分成没有重叠的、相同大小的训练集和测试集。如每个类别随机的选取5幅图象作为训练集,剩余5幅归为测试集。当然也可以选取任意张图片进行训练和测试。
图1-1 ORL 人脸库中的部分图片 由图1-1中可以看出,该人脸库中的图片在人种,性别,面部表情等方面都有着很大的可变性,而且该人脸库没有太多多余的边界,基本上一张图片就是一副人脸,处理起来比较方便。
(1)系统框图
通过提取图片的特征向量S 作为网络的输入,并通过BP 网络连接到40个输出单元(40个人即有40个分类器),哪个输出单元数值最大则被推荐为分类结果。如输出向量为
[1000…000]T ,则该图片被分类为人物1。
图片 输入 特征 提取 BP 网络 分类
结果
BP 神经网络 人物1 人物2 人物3 人物39 人物40 …
… S1 S3 S2 S32 S30 S31
(2)特征提取
特征提取目的,原理等
(3)划分训练集和测试集
对上一步处理中得到的特征矩阵进行划分,将其划分为训练集train_datatest_data,和测试集test_data,用以进行训练和测试,建立测试目标集t,并对训练集和测试集进行归一化处理,得到pn和pnew。
如我们取每人6张图片作为训练样本组成训练矩阵,从人物1依次到人物40把图片输入给神经网络,则目标矩阵应为:
t=[
]
(4)构建BP神经网络
调用MATLAB神经网络工具箱,构建BP神经网络。此处调用了newff()函数创建神经网络。
(5)训练神经网络
调用matlab神经网络工具箱函数train(),用训练函数训练BP神经网络。函数形式:[net,tr] = train(NET,X,T,Pi,Ai);NET:待训练网络,X:输入数据矩阵,T:输出数据矩阵,net:训练好的网络。
disp('开始训练BP神经网络,这个过程比较长,请耐心等待..........');
[net,tr] = train(net,pn,t);
disp('神经网络训练结束!');
训练的误差曲线图如图2-9所示:
图2-9 训练误差曲线图
该过程实现的是神经网络的训练,当神经网络训练好以后,就可以进行识别。
(6)测试神经网络
输入测试集来统计神经网络的识别率。此处调用了matlab神经网络工具箱函数sim(),用训练好的BP神经网络预测函数输出。
result_test=sim(net, pnewn);
result_test第i列的最大值即第i张测试图片的识别分类结果则
[C,I]=max(result_test);
C是得出的result_test中的每一列的最大值,I是最大值所在的行数。故若正确识别,则I应为[1 1 1 1 2 2 2 2 3 3 3 3 …… 40 40 40 40],统计I中与此不符的个数即可。
(7)识别人脸