BP神经网络的matlab实现

什么是BP神经网络

BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

BP网络构建

这里写图片描述

BP网络的训练函数

这里写图片描述

BP网络训练参数

1.训练参数 2.参数介绍 3.训练函数
net.trainParam.epochs 最大训练次数(缺省为10) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.goal 训练要求精度(缺省为0) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.lr 学习率(缺省为0.01) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.max_fail 最大失败次数(缺省为5) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.min_grad 最小梯度要求(缺省为1e-10) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.show 显示训练迭代过程(NaN表示不显示,缺省为25) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.time 最大训练时间(缺省为inf) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.mc 动量因子(缺省0.9) traingdm、traingdx
net.trainParam.lr_inc 学习率lr增长比(缺省为1.05) traingda、traingdx
net.trainParam.lr_dec 学习率lr下降比(缺省为0.7) traingda、traingdx
net.trainParam.max_perf_inc 表现函数增加最大比(缺省为1.04) traingda、traingdx
net.trainParam.delt_inc 权值变化增加量(缺省为1.2) trainrp
net.trainParam.delt_dec 权值变化减小量(缺省为0.5) trainrp
net.trainParam.delt0 初始权值变化(缺省为0.07) trainrp
net.trainParam.deltamax 权值变化最大值(缺省为50.0) trainrp
net.trainParam.searchFcn 一维线性搜索方法(缺省为srchcha) traincgf、traincgp、traincgb、trainbfg、trainoss
net.trainParam.sigma 因为二次求导对权值调整的影响参数(缺省值5.0e-5) trainscg
net.trainParam.lambda Hessian矩阵不确定性调节参数(缺省为5.0e-7) trainscg
net.trainParam.men_reduc 控制计算机内存/速度的参量,内存较大设为1,否则设为2(缺省为1) trainlm
net.trainParam.mu 的初始值(缺省为0.001)
trainlm
net.trainParam.mu_dec 的减小率(缺省为0.1)
trainlm
net.trainParam.mu_inc 的增长率(缺省为10)
trainlm
net.trainParam.mu_max 的最大值(缺省为1e10)
trainlm

[Matlab]例1

输入:P=[-1 -1 2 2 4;0 5 0 5 7];
输出:T=[-1 -1 1 1 -1];

代码

clear;
clc;
P=[-1 -1 2 2 4;0 5 0 5 7];
T=[-1 -1 1 1 -1];
%利用minmax函数求输入样本范围
net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');

net.trainParam.show=50;  %显示训练迭代过程
net.trainParam.lr=0.05;  %学习率
net.trainParam.epochs=300; %最大训练次数
net.trainParam.goal=1e-5; %训练要求精度
[net,tr]=train(net,P,T); %网络训练

W1= net.iw{1, 1}  %输入层到中间层的权值
B1 = net.b{1} %中间各层神经元阈值
W2 = net.lw{2, 1} %中间层到输出层的权值
B2 = net.b{2} %输出层各神经元阈值

sim(net,P) %利用得到的神经网络仿真

matlab工具箱结果解释

这里写图片描述

[Matlab]例2

利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
样本数据:
这里写图片描述

代码

看到期望输出的范围是[-1, 1] ,所以利用双极性Sigmoid函数作为转移函数。

clear;
clc;
X=-1:0.1:1;
D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...
    0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988...
    0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];
figure;
plot(X,D,'*'); %绘制原始数据分布图(附录:1-1)
net = newff([-1 1],[5 1],{'tansig','tansig'});
net.trainParam.epochs = 100; %训练的最大次数
net.trainParam.goal = 0.005; %全局最小误差
net = train(net,X,D); 
O = sim(net,X); 
figure; 
plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:1-2、1-3)
V = net.iw{1,1}%输入层到中间层权值
theta1 = net.b{1}%中间层各神经元阈值
W = net.lw{2,1}%中间层到输出层权值
theta2 = net.b{2}%输出层各神经元阈值

输出图像

这里写图片描述

  • 46
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BP神经网络MATLAB实现可以通过以下步骤进行: 1. 导入数据:首先,需要将训练数据和测试数据导入MATLAB中。可以使用`xlsread`函数读取Excel文件中的数据,或者使用`csvread`函数读取CSV文件中的数据。 2. 数据预处理:对导入的数据进行预处理,包括数据归一化、特征选择等操作。可以使用MATLAB中的函数来实现这些操作,例如`mapminmax`函数进行数据归一化。 3. 构建神经网络:使用MATLAB中的`feedforwardnet`函数来构建BP神经网络。可以指定网络的层数、每层的神经元数量等参数。 4. 设置训练参数:设置神经网络的训练参数,包括学习率、最大训练次数、误差容限等。可以使用MATLAB中的`trainlm`函数来设置这些参数。 5. 训练神经网络:使用训练数据对神经网络进行训练。可以使用MATLAB中的`train`函数来实现训练过程。 6. 测试神经网络:使用测试数据对训练好的神经网络进行测试。可以使用MATLAB中的`sim`函数来进行测试。 7. 分析结果:根据测试结果进行分析,可以计算预测值与真实值之间的误差,绘制误差分析图像等。 下面是一个MATLAB实现BP神经网络的示例代码: ```matlab % 导入数据 data = xlsread('data.xlsx'); inputs = data(:, 1:end-1)'; targets = data(:, end)'; % 数据预处理 inputs = mapminmax(inputs); % 构建神经网络 net = feedforwardnet([10 5]); % 设置训练参数 net.trainParam.lr = 0.01; net.trainParam.epochs = 100; net.trainParam.goal = 0.01; % 训练神经网络 net = train(net, inputs, targets); % 测试神经网络 outputs = sim(net, inputs); % 分析结果 errors = targets - outputs; mae = mean(abs(errors)); mse = mean(errors.^2); mrse = sqrt(mse); % 显示结果 disp(['MAE: ' num2str(mae)]); disp(['MSE: ' num2str(mse)]); disp(['MRSE: ' num2str(mrse)]); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值