用subplot函数MATLAB神经⽹络(2)BP神经⽹络的⾮线性系统建模——⾮线
性函数拟合
2.1 案例背景
在⼯程应⽤中经常会遇到⼀些复杂的⾮线性系统,这些系统状态⽅程复杂,难以⽤数学⽅法准确建模。在这种情况下,可以建⽴BP神经⽹络表达这些⾮线性系统。该⽅法把未知系统看成是⼀个⿊箱,⾸先⽤系统输⼊输出数据训练BP神经⽹络,使⽹络能够表达该未知函数,然后⽤训练好的BP神经⽹络预测系统输出。
本章拟合的⾮线性函数为
y=x12+x22
该函数的图形如下图所⽰。
t=-5:0.1:5;
[x1,x2] =meshgrid(t);
y=x1.^2+x2.^2;
surfc(x1,x2,y);
shading interp
xlabel('x1');
ylabel('x2');
zlabel('y');
title('⾮线性函数');
2.2 模型建⽴
神经⽹络结构:2-5-1
从⾮线性函数中随机得到2000组输⼊输出数据,从中随机选择1900 组作为训练数据,⽤于⽹络训练,100组作为测试数据,⽤于测试⽹络的拟合性能。
2.3 MATLAB实现
2.3.1 BP神经⽹络⼯具箱函数
newff
BP神经⽹络参数设置函数。
net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)
P:输⼊数据矩阵;
T:输出数据矩阵;
S:隐含层节点数;
TF:结点传递函数。包括硬限幅传递函数hardlim、对称硬限幅传递函数hardlims、线性传递函数purelin、正切型传递函数tansig、对数型传递函数logsig;
x=-5:0.1:5;
subplot(2,6,[2,3]);
y=hardlim(x);
plot(x,y,'LineWidth',1.5);
title('hardlim');
subplot(2,6,[4,5]);
y=hardlims(x);
plot(x,y,'LineWidth',1.5);
title('hardlims');
subplot(2,6,[7,8]);
y=purelin(x);
plot(x,y,'LineWidth',1.5);
title('purelin');
subplot(2,6,[9,10]);
y=tansig(x);
plot(x,y,'LineWidth',1.5);
title('tansig');
subplot(2,6,[11,12]);
y=logsig(x);
plot(x,y,'LineWidth',1.5);
title('logsig');
BTF:训练函数。包括梯度下降BP算法训练函数traingd、动量反传的梯度下降BP算法训练函数traingdm、动态⾃适应学习率的梯度下降BP算法训练函数traingda、动量反传和动态⾃适应学习率的梯度下降BP算法训练函数traingdx、Levenberg_Marquardt的BP算法训练函数trainlm;
BLF:⽹络学习函数。包括BP学习规则learngd、带动量项的BP学习规则learngdm;
PF:性能分析函数,包括均值绝对误差性能分析函数mae、均⽅差性能分析函数mse;
IPF:输⼊处理函数;
OPF:输出处理函数;
DDF:验证数据划分函数。
⼀般在使⽤过程中设置前⾯6个参数,后⾯4个参数采⽤系统默认参数。
train
⽤训练数据训练BP神经⽹络。
[net, tr]=train(NET, X, T, Pi, Ai)
NET:待训练⽹络;
X:输⼊数据矩阵;
T输出数据矩阵;
Pi:初始化输⼊层条件;
Ai:初始化输出层条件;
net:训练好的⽹络;
训练过程记录。
sim
BP神经⽹络预测函数。
y=sim(net, x)
net:训练好的⽹络;
x:输⼊数据;
y:⽹络预测数据。
2.3.2 数据选择和归⼀化
%% 基于BP神经⽹络的预测算法
%% 清空环境变量
clc
clear
%% 训练数据预测数据提取及归⼀化
input=10*randn(2,2000);
output=sum(input.*input);
%从1到2000间随机排序
k=rand(1,2000);
[m,n]=sort(k);
%出训练数据和预测数据
input_train=input(:,n(1:1900));
output_train=output(n(1:1900));
input_test=input(:,n(1901:2000));
output_test=output(n(1901:2000));
%选连样本输⼊输出数据归⼀化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
2.3.3 BP神经⽹络训练
%% BP⽹络训练
% %初始化⽹络结构
net=newff(inputn,outputn,5);
% 配置⽹络参数(迭代次数,学习率,⽬标)
%⽹络训练
net=train(net,inputn,outputn);
2.3.4 BP神经⽹络预测
%% BP⽹络预测
%预测数据归⼀化
inputn_test=mapminmax('apply',input_test,inputps);
%⽹络预测输出
an=sim(net,inputn_test);
%⽹络输出反归⼀化
BPoutput=mapminmax('reverse',an,outputps);
2.3.5 结果分析
%% 结果分析
figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP⽹络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;
figure(2)
plot(error,'-*')
title('BP⽹络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(3)
plot((BPoutput-output_test)./output_test,'-*');
title('神经⽹络预测误差百分⽐')
% 计算平均绝对百分⽐误差(mean absolute percentage error) MAPE=mean(abs(BPoutput-output_test)./output_test)
2.4 扩展
2.4.1 多隐含层BP神经⽹络
net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)
S可为向量,如[5,5]表⽰该BP神经⽹络为双层,每个隐含层的节点数都是5。
Neural Network:神经⽹络结构,输⼊、中间层、输出维度。
Data Division:数据划分算法;
Training:训练算法;
Performance:误差算法;
Calculations:编译算法。
Epoch:迭代次数;
Time:训练时间;
Performance:误差;
Gradient:梯度;
Mu:阻尼因⼦;
Validation Checks:泛化能⼒检查。
Performance:误差图⽰;
Training State:训练状况图⽰;
Regression:回归曲线图⽰;
Plot Interval:绘图刻度。
2.4.2 隐含层节点数
对复杂问题来说,⽹络预测误差随节点数增加⼀般呈现先减少后增加的趋势。
2.4.3 训练数据对预测精度的影响
缺乏训练数据可能使BP神经⽹络得不到充分训练,预测值和期望值之间误差较⼤。
2.4.4 节点转移函数
⼀般隐含层选择logsig或tansig,输出层选择tansig或purelin。
2.4.5 ⽹络拟合的局限性
BP神经⽹络虽然具有较好的拟合能⼒,但其拟合能⼒不是绝对的,对于⼀些复杂系统,BP 神经⽹络预测结果会存在较⼤误差。
2.5 MATLAB doc
Feedforward networks consist of a series of layers. The first layer has a connection from the network input. Each subsequent layer has a connection from the previous layer. The final layer produces the network’s output.
Feedforward networks can be used for any kind of input to output mapping. A feedforward network with one hidden layer and enough neurons in the hidden layers, can fit any finite input-output mapping problem.
feedforwardnet(hiddenSizes,trainFcn)
This following example loads a dataset that maps anatomical measurements x to body fat percentages t. A feedforward network with 10 neurons is created and trained on that data, then simulated.
[x,t] = bodyfat_dataset;
net = feedforwardnet([10,10]);
view(net);
net = train(net,x,t);
y = net(x);
plot((y-t))
Processing math: 100%
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论