《实验四、神经网络-bp算法》由会员分享,可在线阅读,更多相关《实验四、神经网络-bp算法(8页珍藏版)》请在金锄头文库上搜索。
1、信息10-1 张慧 36号北华大学开放实验报告实验名称: 实验四 神经网络-BP算法 所属课程: 模式识别 班 级: 信息101 学 号: 36 姓 名: 张慧 实验四、神经网络-BP算法一、 实验目的:1、 熟悉MATLAB中神经网络工具箱的使用方法;2、了解BP神经网络各种优化算法的原理;3、掌握BP神经网络各种优化算法的特点;4、掌握使用BP神经网络各种优化算法解决实际问题的方法。二、实验内容:1 案例背景1.1 BP神经网络概述BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播。在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层。每一层的神经元状态
2、只影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络预测输出不断逼近期望输出。BP神经网络的拓扑结构如图1.1所示。图1.1 BP神经网络拓扑结构图图1.1中, 是BP神经网络的输入值, 是BP神经的预测值,和为BP神经网络权值。从图1.1可以看出,BP神经网络可以看成一个非线性函数,网络输入值和预测值分别为该函数的自变量和因变量。当输入节点数为,输出节点数为时,BP神经网络就表达了从个自变量到个因变量的函数映射关系。BP神经网络预测前首先要训练网络,通过训练使网络具有联想记忆和预测能力。BP神经网络的训练过程包括以下几个步骤。步
3、骤1:网络初始化。根据系统输入输出序列确定网络输入层节点数、隐含层节点数,输出层节点数,初始化输入层、隐含层和输出层神经元之间的连接权值和,初始化隐含层阈值,输出层阈值,给定学习速率和神经元激励函数。步骤2:隐含层输出计算。根据输入向量,输入层和隐含层间连接权值以及隐含层阈值,计算隐含层输出。式中, 为隐含层节点数; 为隐含层激励函数,该函数有多种表达形式,本章所选函数为:步骤3:输出层输出计算。根据隐含层输出,连接权值和阈值,计算BP神经网络预测输出。步骤4:误差计算。根据网络预测输出和期望输出,计算网络预测误差。步骤5:权值更新。根据网络预测误差更新网络连接权值,。式中, 为学习速率。步骤
4、6:阈值更新。根据网络预测误差更新网络节点阈值,。步骤7:判断算法迭代是否结束,若没有结束,返回步骤2。1.2 基于BP算法的多层前馈网在催化剂配方建模中的应用随着化工技术的发展,各种新型催化剂不断问世,在产品的研制过程中,需要制定优化指标并设法找出使指标达到最佳值的优化因素组合,因此属于典型的非线性优化问题。目前常用的方法是采用正交设计法安排实验,利用实验数据建立指标与因素间的回归方程,然后采用某种寻优法,求出优化配方与优化指标。这种方法的缺陷是,数学模型粗糙,难以描述优化指标与各因素之间的非线性关系,以其为基础的寻优结果误差较大。 理论上已经证明,三层前馈神经网络可以任意精度逼近任意连续函
5、数。本例采用BP神经网络对脂肪醇催化剂配方的实验数据进行学习,以训练后的网络作为数学模型映射配方与优化指标之间的复杂非线性关系,获得了较高的精度。三、 实现方法(设计):1 模型建立基于BP神经网络的分类算法建模包括BP神经网络构建、BP神经网络训练和BP神经网络分类三步,算法流程如图1.2所示。图1.2 算法流程2 MATLAB实现根据BP神经网络理论,在MATLAB软件中编程实现基于BP算法的多层前馈网在催化剂配方中的建模。归一化方法及MATLAB函数数据归一化方法是神经网络预测前对数据常做的一种处理方法。数据归一化处理把所有数据都转化为绝对值为之间的数,其目的是取消各维数据间数量级差别,
6、避免因为输入输出数据数量级差别较大而造成网络预测误差较大。数据归一化的方法主要有以下两种。1)最大最小法。函数形式如下:式中,为数据序列中的最小数; 为序列中的最大数。2)平均数方差法,函数形式如下:式中, 为数据序列的均值;为数据的方差。input_test是测试输入原始数据, input_test1是归一化后的数据。minp,maxp表示根据input_train的值对input_test进行归一化。outputp1是训练输出数据的归一化值, output是反归一化之后的网络预测输出, mint,maxt表示根据output_train对数据进行反归一化。数据选择将zb0708.xls中5
7、822行实验数据分别作为神经网络的训练样本(13880行)及测试样本(38815822行),并对训练数据进行归一化处理。2.4 BP神经网络训练用训练数据训练BP神经网络,在训练过程中根据网络预测误差调整网络的权值和阈值。设定训练次数为2000,学习率为0.05,误差限为0.001。四、 实验MATLAB程序 clear;clc;clear all;train1=xlsread(zb0708.xls,sheet1,a1:cg3880); %训练样本train_class=xlsread(zb0708.xls,sheet1,ch1:ch3880); %训练样本类型test=xlsread(zb0
8、708.xls,sheet1,a3881:cg5822); %测试样本test_class=xlsread(zb0708.xls,sheet1,ch3881:ch5822);%测试样本原来的类型class=train_class;%训练样本类型,由于下面函数特征数在列,而所给的数据在行,故转置p=train1; %训练样本数据,转置原因同理P_test=test; %测试样本数据,转置原因同理t1=test_class; %测试样本类型,转置原因同理,计算误差用%*构造输出矩阵*s=length(class);t=zeros(s,2);for i = 1 : s t(i,class(i) =
9、1;endt=t; %转置成行向量pn,minp,maxp,tn,mint,maxt = premnmx(p,t); %训练样本归一化-11p2= tramnmx(P_test,minp,maxp); %测试样本归一化%创建网络参数,可以根据自己要求修改net=newff(minmax(pn),85,6,2,tansig,tansig,purelin,traingdm,learngdm,mse);net.trainparam.show=50;net.trainparam.mc=0.9;net.trainparam.lr=0.05;net.trainparam.epochs=2000;net.t
10、rainparam.goal=0.01;net=init(net); %网络初始化net,tr=train(net,pn,tn); %训练网络PN=sim(net,p2); %网络仿真t2= postmnmx(PN,mint,maxt); %反归一化%*统计识别率*%统计识别正确率s1,s2=size(t2);%结果概率hitNum=0;for i=1: s2 m,Index =max(t2(:,i); Class_sort(i,:)=Index; if(Index=t1(i) hitNum=hitNum+1; endendPrecision=正确率,hitNum/length(t1);%*做
11、出预测类别结果的散点图*figure(1);m2=length(Class_sort);X=1:1:m2;plot(X,Class_sort,r*,X,t1,bo);set(gca,xtick,0:1:40); %设置x轴属性set(gca,ytick,1:1:4); %设置y轴属性xlabel(测试样本序号);ylabel(样本所属类别);title(o为真实值,*为预测值);xlswrite(read06.xls,Class_sort,sheet1); %写测试样本类型xlswrite(read06.xls,Precision,sheet1,C3:d3); %计算正确率winopen(re
12、ad06.xls);五、 实验结果 六、实验结果分析BP算法是一种有监督式的学习算法,其主要思想是:输入学习样本,使用反向传播算法对网络的权值和偏差进行反复的调整训练,使输出的向量与期望向量尽可能地接近,当网络输出层的误差平方和小于指定的误差时训练完成,保存网络的权值和偏差。BP神经网络的隐含层节点数对BP神经网络预测精度有较大的影响:节点数太少,网络不能很好地学习,需要增加训练次数,训练的精度也受影响;节点数太多,训练时间增加,网络容易过拟合。最佳隐含层节点数选择可参考如下公式:式中,为输入层节点数; 为隐含层节点数; 为输出层节点数; 为0-10之间的常数。在实际问题中,隐含层节点数的选择首先是参考公式来确定节点数的大概范围,然后用试凑法确定最佳的节点数。