一、简介
BP网络(Back
Propagation),是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
在人工神经网络发展历史中,很长一段时间里没有找到隐层的连接权值调整问题的有效算法。直到误差反向传播算法(BP算法)的提出,成功地解决了求解非线性连续函数的多层前馈神经网络权重调整问题。
BP (Back
Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。
BP神经网络模型BP网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。
2 BP神经网络模型及其基本原理
3 BP_PID算法流程
二、源代码
%% 清空环境变量 close all clc; clear %% 训练数据预测数据提取及归一化 %下载输入输出数据 load traindata1011
A O load goontest inputtest_may16 outputtest_may16
inputnum=7;hiddennum=6;outputnum=1; %4-5-1结构 编码长度31 7-5-1 46 %训练数据和预测数据
input_train=A(1:360,:)'; input_test=inputtest_may16(1:24,:)';
output_train=O(1:360)'; output_test=outputtest_may16(1:24)'; %选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train); %% BP网络训练 %构建网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'}); %网络进化参数
net.trainParam.epochs=100; %迭代次数,学习率,目标 net.trainParam.lr=0.1;
net.trainParam.goal=0.00001; net.trainParam.show=100;
net.trainParam.showWindow=0; %网络训练 net=train(net,inputn,outputn); %% BP网络预测
%预测数据归一化 inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出
an=sim(net,inputn_test); %网络输出反归一化 BPoutput=mapminmax('reverse',an,outputps);
%% 结果分析 figure(1) plot(BPoutput,':og') hold on plot(output_test,'-*');
legend('预测输出','期望输出') title('BP网络预测输出','fontsize',12)
ylabel('函数输出(W)','fontsize',12) xlabel('样本(h)','fontsize',12) %预测误差
error=BPoutput-output_test; error1=(output_test-BPoutput)./BPoutput; %相对误差 %
figure(2) % plot(error,'-*') % title('BP网络预测误差','fontsize',12) %
ylabel('误差','fontsize',12) % xlabel('样本','fontsize',12) %网络训练
net=train(net,inputn,outputn); %% BP网络预测 %预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出
an=sim(net,inputn_test); %网络输出反归一化 BPoutput=mapminmax('reverse',an,outputps);
三、运行结果