本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
matlab2012b以上的BP神经网络工具箱已经内嵌了归一化等数据处理流程
本文讲解使用matlab进行BP神经网络简捷建模的流程与步骤,并展示一个具体例子
通过本文,可以了解如何使用matlab来简捷构建一个BP神经网络,以及具体的代码实现
本节介matlab工具箱BP神经网络进行简捷建模的步骤
BP神经网络-建模步骤
matlab神经网络工具箱对BP神经网络做了高度封装,
因此,我们实际使用matlab神经网络工具箱时,一般只需要三个操作步骤:
● 设置网络 ● 训练网络 ● 查看结果
使用BP神经网络工具箱进行建模的简捷步骤共有三个,如下:
一、设置神经网络及参数
主要是设置隐层节点个数、训练步数等
二、将所有数据投入训练
将所有数据投入工具箱的训练函数后,工具箱会自动将数据归一化
并分割为三份:训练,验证和测试 (默认占比为70%,15%,15%)
其中,训练数据用于训练,验证数据在训练过程中检验是否过拟合
测试数据留给用户自行测试,测试数据不参与任何过程
注意,在一些老版本中(2012b之前),需要用户自己对数据进行归一化
三、查 看 结 果
工具箱训练完网络,会将网络的训练结果返回
返回的训练结果包括所有数据的预测值,和训练、检验、测试数据的索引
我们只需要从工具箱的训练结果中根据训练、测试数据索引,
抽出训练数据和测试数据的预测值,查看训练、测试数据的预测效果即可
本节展现按照matlab工具箱推荐的流程来实现BP神经网络的简捷建模
BP神经网络-简捷建模流程
按照神经网络工具箱的建模流程,只需要以下简单的三步即可:
本文按此流程实现一个BP神经网络的DEMO,
具体思路细节如下:
1、生成数据
2、设置一个三层的BP网络,并将隐节点设为3
3、训练网络
4、抽出训练结果中的训练数据与测试数据的预测结果,并与原始数据进行对比
5、使用训练好的BP神经网络进行预测
具体代码实现如下:
% 本代码用于展示BP神经网络的简单建模
% 代码来自《老饼讲解-BP神经网络》www.bbbdata.com
% 笔者的运行版本:matlab-2014b
clear all;
close all ;
%================原始数据====================
x1 = linspace(-3,3,100); % 在[-3,3]之间线性生成100个数据
x2 = linspace(-2,1.5,100); % 在[-2,1.5]之间线性生成100个数据
X = [x1;x2]; % 将x1,x2作为输入数据
y = 10*sin(x1)+0.2*x2.*x2; % 生成y
setdemorandstream(88); % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
%==============网络训练 ============================
%使用用输入输出数据(X,y)建立网络,
%隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。
net = newff(X,y,3,{'tansig','purelin'},'trainlm');
%设置一些常用关键参数
net.trainparam.goal = 0.00001; % 训练目标:均方误差低于0.0001
net.trainparam.show = 400; % 每训练400次展示一次结果
net.trainparam.epochs = 15000; % 最大训练次数:15000.
net.divideParam.trainRatio=0.7; % 用于训练的数据比例
net.divideParam.valRatio=0.15 ; % 用于验证过拟合的数据比例
net.divideParam.testRatio=0.15; % 用于比例
net.trainparam.max_fail =6; % 过拟合验证失败次数
[net,tr,net_y] = train(net,X,y); % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回
% ===========画图==================================
figure
subplot(2,1,1);
title('训练数据的拟合效果')
hold on
plot(1:length(tr.trainInd),y(tr.trainInd),'b')
plot(1:length(tr.trainInd),net_y(tr.trainInd),'r')
subplot(2,1,2);
title('测试数据的拟合效果')
hold on
plot(1:length(tr.testInd),y(tr.testInd),'b')
plot(1:length(tr.testInd),net_y(tr.testInd),'r')
%=============网络对新输入的使用==========================
sim_y = sim(net,X); % 实际与上面的net_y一致
代码运行结果如下:
从结果可以看到,训练数据效果和测试数据效果都不错
以上就是一个完整的matlab实现BP神经网络Demo代码了,
也可以加入更多个性化设置,具体可参考《matlab-BP神经网络工具箱-训练参数详解》
好了,以上就是如何使用matlab的工具箱来简单构建一个BP神经网络了~
End