BP神经网络的建模
建模理论与实现
【讲解】如何使用matlab工具箱训练BP神经网络
作者 : 老饼 日期 : 2022-10-30 06:41:06 更新 : 2022-10-30 18:57:25
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



本文讲解使用matlab神经网络工具箱进行BP神经网络建模流程与具体步骤



  01. matlab的BP神经网络建模步骤  


下面讲述利用matlab神经网络工具箱进行BP神经网络建模的步骤


    建模步骤    


matlab神经网络工具箱对BP神经网络做了高度封装,   
因此,我们实际使用matlab神经网络工具箱进行BP神经网络建模,
一般只需要三个操作步骤:

  ● 设置网络        ● 训练网络      ● 查看结果  

可以看到,使用matlab神经网络工具箱训练一个BP网络非常简单,
因为它已经帮我们把归一化、数据分割、训练这些工作都做了
我们只需要直接调用工具箱的方法就可以




  02. 实例讲解  


本节先展现一个实例的代码,再讲解代码的含义


    实例代码    


我们先看一个matlab神经网络工具箱训练BP神经网络的简单例子(matlab2018a)
X = [1,2,3,5,8];                                           % 输入数据X
y= [4,10,20,52,130];                                       % 输出数据y 
net = newff(X,y,3,{'tansig','purelin'},'trainlm') ;        % 构建一个BP神经网络
[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进行预测
通过上面的代码,就可以训练一个BP神经网络,
最后,通过sim函数,就可以使用训练好的网络进行预测




    代码讲解   


下面我们讲解上述BP神经网络建模代码关键部分的含义
 
 
newff-初始化网络

 
newff用于初始化一个BP神经网络,它的参数意义如下:
● 3代表只有一个节点数为3的隐层                                                                                        
 如果换成[4,5]则代表有两个隐层,第一个隐层有4个节点,第二个隐层有5个节点        
 

● {'tansig','purelin'}则代表隐层、输出层的激活函数分别为tansig和purelin,                          
 如果有两个隐层,就需要给两个隐层设置激活函数,例如{'tansig','tansig','purelin'}
 

● trainlm则是我们的训练函数,代表用lm算法训练网络                                                        
 也可设为'traingd',代表用梯度下降算法训练网络                                 
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,其它数据获取类似                    
sim-网络预测
最后,我们只需要使用sim函数就可以用训练好的网络对新数据进行预测了 
sim_y = sim(net,X)代表用训练好的net对X进行预测,sim_y就是预测结果  



   ✍️关于输入输出的特别说明   


 BP神经网络工具箱的输入和输出都是矩阵,
每一列代表一个样本,每行代表一个变量,切记,如下





联系老饼