BP神经网络matlab简单实现

BP神经网络matlab简单实现

1、结构原理

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

单个神经元结构

2、计算迭代过程

BP神经网络的计算过程由正向计算过程和反向计算过程组成。正向传播过程,输入模式从输入层经隐单元层逐层处理,并转向输出层,每~层神经元的状态只影响下一层神经元的状态。如果在输出层不能得到期望的输出,则转入反向传播,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。

3、利用matlab提供的工具箱创建一个BP神经网络

%%
clear
%添加数据集
 load concrete_data
 %%  划分数据集
 temp = randperm(size(attributes,2));
 P_train = attributes(: , temp(1:80) );
 T_train = strength(: , temp(1:80) );
 P_test = attributes(: , temp(81:end) );
 T_test = strength(: , temp(81:end) );
 %% 数据归一化
 [p_train , ps_train ] = mymapminmax(P_train,0,1);
 p_test = mapminmax('apply',P_test,ps_train);
[ t_train , ps_output ] = mymapminmax(T_train , 0,1);
%% 开始构建BP网络
net = newff(p_train,t_train,9);   %隐含层为9个神经元
%设定参数网络参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;
%% 开始训练
net = train(net,p_train,t_train);
%% 测试网络
t_sim = sim(net,p_test);
%反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);
R2 = corrcoef(T_sim,T_test);
R2 = R2(1,2)^ 2;
%% 画出误差图
figure
plot( 1:23 , T_test, '-or' ,1:23 , T_sim , '-*b');