matlab神经网络(二)-bp神经网络,MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合...

2.1 案例背景

在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。该方法把未知系统看成是一个黑箱,首先用系统输入输出数据训练BP神经网络,使网络能够表达该未知函数,然后用训练好的BP神经网络预测系统输出。

本章拟合的非线性函数为\[y = {x_1}^2 + {x_2}^2\]该函数的图形如下图所示。

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(‘非线性函数‘);

445c376e94b0fc4037a16b59cd5e0f7f.png

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‘);

fd85a52c2461f14c179fdcc2999d0b46.png

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.trainParam.epochs=100;

net.trainParam.lr=0.1;

net.trainParam.goal=0.00004;

%网络训练

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)

1ce0a08eb2107d35cd4a94e35d1332bd.png

%预测误差

error=BPoutput-output_test;

figure(2)

plot(error,‘-*‘)

title(‘BP网络预测误差‘,‘fontsize‘,12)

ylabel(‘误差‘,‘fontsize‘,12)

xlabel(‘样本‘,‘fontsize‘,12)

86984dbdd60d0c6c7423444a7a4baba0.png

figure(3)

plot((BPoutput-output_test)./output_test,‘-*‘);

title(‘神经网络预测误差百分比‘)

0c56fdec0d43b5df0709ed3d73479257.png

% 计算平均绝对百分比误差(mean absolute percentage error)

MAPE=mean(abs(BPoutput-output_test)./output_test)

c5b9612033cb137815e34719befcf12a.png

原文:https://www.cnblogs.com/dingdangsunny/p/12324107.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值