本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
matlab的工具箱提供了BP神经网络的实现方法,它是目前最常用来构建BP神经网络的方式
本文讲解使用matlab神经网络工具箱进行BP神经网络建模的方法,以及对具体代码进行逐行讲解
通过本文,可以详细、具体了解,如何使用matlab来实现BP神经网络,以及每句代码的意思
下面讲述利用matlab神经网络工具箱进行BP神经网络建模的步骤
matlab工具箱-BP神经网络建模步骤
BP神经网络建模过程是繁琐的,但matlab神经网络工具箱对BP做了高度封装,
因此,我们实际使用matlab神经网络工具箱进行建模却是简单的,
一般只需要如下三个操作步骤:
● 设置网络 ● 训练网络 ● 查看结果
可以看到,使用matlab神经网络工具箱训练一个BP网络非常简单,
因为它已经帮我们把归一化、数据分割、训练这些工作都做了
我们只需要直接调用matlab神经网络工具箱的方法就可以
本节先展示一个matlab神经网络工具箱实现BP神经网络的代码
下节再讲解每一行代码的具体意义
matlab-BP神经网络-实例代码
我们先看一个matlab神经网络工具箱训练BP神经网络的简单例子(matlab2018a)
通过下面的代码,就可以训练一个BP神经网络
最后,通过sim函数,就可以使用训练好的模型进行预测
X = [1,2,3,5,8]; % 输入数据X
y= [4,10,20,52,130]; % 输出数据y
net = newff(X,y,3,{'tansig','purelin'},'trainlm') ; % 构建一个BP神经网络
net.trainparam.goal = 0.00001; % 训练目标:均方误差低于0.00001
[net,tr,net_y] = train(net,X,y); % 训练网络
train_err = mean(abs(net_y(tr.trainInd)-y(tr.trainInd))); % 训练数据的误差
test_err = mean(abs(net_y(tr.testInd)-y(tr.testInd))); % 测试数据的误差
sim_y = sim(net,X); % 使用训练好的网络对X进行预测
✍️ 关于一些matlab老代码的说明
一些读者在网上或书上借鉴的matlab实现BP神经网络的代码,
往往这些代码非常长,主要是因为其中包括了归一化等相关处理
事实上,自matlab2012b之后,matlab神经网络工具箱已经作了高度封装,
因此现在使用matlab构建BP神经网络已经节省了非常多的代码,建议初学者先按本文的代码进行学习和理解
本节讲解上述BP神经网络建模matlab代码关键部分的含义
第1、2行代码解读:数据的输入输出
第一第二行的matlab代码是训练数据的输入和输出
BP神经网络工具箱的输入和输出都是矩阵,
✍️PASS:每一列代表一个样本,每行代表一个变量, 切记
第3-5行代码解读:设置与训练
代码的第3、4、5是BP神经网络的设置与训练
各行的具体含义如下
👉 第三行用于构建一个BP神经网络
👉 第四行用于设置训练的参数(可不设置)
👉 第五行用于训练网络
newff-初始化BP神经网络
newff是matlab用于初始化一个BP神经网络的函数,它的参数意义如下:
● 3代表只有一个节点数为3的隐层
如果换成[4,5]则代表有两个隐层,第一个隐层有4个节点,第二个隐层有5个节点
● {'tansig','purelin'}则代表隐层、输出层的激活函数分别为tansig和purelin,
如果有两个隐层,就需要给两个隐层设置激活函数,例如{'tansig','tansig','purelin'}
● trainlm则是我们的训练函数,代表用lm算法训练网络
也可设为'traingd',代表用梯度下降算法训练网络,但强烈建议用默认的trainlm
关于训练参数的设置
代码第四行net.trainparam.goal是设置训练目标,网络误差小于该值时停止训练
可以设置的参数很多,具体查看《matlab的BP神经网络使用详解》
train-训练网络
train代表训练网络,
● train的工作流程如下:
调用train后,train就会把X,y进行归一化,
并分割成训练、检验、测试三份数据
然后用训练数据训练模型,
用检验数据监督模型使之不要走向过拟合
测试数据不参与任何过程
● train的输出参数意义如下:
train输出三个参数,这里我们用net,tr,net_y来接收这三个输出,
net是训练好的网络,
tr则存放了一些训练过程的记录,
net_y则是网络对X的预测
● 如何获取三份数据的索引
怎么知道train把哪些数据划为训练,哪些划为测试?
它记录在tr中
tr.trainInd是训练数据的索引
tr.testInd则是测试数据的索引
用X(:,tr.trainInd)就能获取用于训练的X,其它数据获取类似
第6-8行代码解读:BP神经网络的误差与预测
代码的第6、7行用于查看网络的误差
第8行则是用训练好的BP神经网络进行预测
BP神经网络的误差
第5行网络训练时获得的net_y存放了网络的预测值
只需根据tr.trainInd、tr.testInd获取训练数据、测试数据的索引
就可以计算出相应的训练误差和测试误差
BP神经网络的预测
最后,我们只需要使用sim函数就可以用训练好的网络对新数据进行预测了
sim_y = sim(net,X)代表用训练好的net对X进行预测,sim_y就是预测结果
以上就是使用matlab工具箱实现一个BP神经网络建模的例子了~
End