最近刚开始学习神经网络,感觉一开始接触浅浅的理解是没问题的,但是深层次理解还是需要不断地实践。BP是一种前馈的运行,但是可以将误差反馈回去;根据梯度下降法来不断的调整权值(容易陷入局部最小值),直到最后得到的数据可以满足需求;大家可以看一下newff函数的用法

感觉这个讲解的很好,要把里面的参数弄明白;

BP神经网络的matlab写法:

1.导入数据(导入.mat数据,用load函数导入)

2.随机产生训练集和测试集(用randperm函数打乱数据顺序,然后将总的数据分为训练集和测试集)

3.数据归一化(用mapminmax函数进行数据归一化,mapminmax('apply',n,x),n是测试数据,x为训练集的数据特征)

4.进行BP神经网络的创建(newff函数,newff(p_train,t_train,9),9为隐含层的个数)

5.设置训练参数

6.训练网络(用train函数来进行训练)

7.仿真测试(用sim函数进行仿真测试)

8.数据反归一化(mapminmax('reverse',t_sim,ps_output)进行反归一化)

然后进行性能评价

9.相对误差

10.决定系数

11.结果对比

然后可以进行运算

% 1. 导入数据
load spectra_data.mat%用load函数

% 2. 随机产生训练集和测试集
temp = randperm(size(NIR,1));%randperm函数为打乱总体数据的顺序
% 训练集——50个样本
P_train = NIR(temp(1:50),:)';%根据newff函数里面的参数要求,所以要让训练集和测试集的输入数据和输出数据的列相同,所以用’
T_train = octane(temp(1:50),:)';%因为要让训练集和测试集的输入数据和输出数据的列相同,所以用’
% 测试集——10个样本
P_test = NIR(temp(51:end),:)';
T_test = octane(temp(51:end),:)';
N = size(P_test,2);

%% III. 数据归一化
[p_train, ps_input] = mapminmax(P_train,0,1);%用mapminmax函数进行归一化
p_test = mapminmax('apply',P_test,ps_input);%用P_train归一化得到的数据特征将P_test的数据进行相同性质的归一化;

[t_train, ps_output] = mapminmax(T_train,0,1);%对训练集的输出数据进行归一化

%% IV. BP神经网络创建、训练及仿真测试
% 1. 创建网络
net = newff(p_train,t_train,9);%创建BP网络

% 2. 设置训练参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;

% 3. 训练网络
net = train(net,p_train,t_train);

% 4. 仿真测试
t_sim = sim(net,p_test);%用sim函数进行仿真测试

% 5. 数据反归一化
T_sim = mapminmax('reverse',t_sim,ps_output);%ps_output是T_train的归一化数据特征

BP神经网络的优缺点:

优点:

1.自学习和自适应能力

2.非线性映射能力

3.有一定的容错能力

4.将学习成果能应用在新的知识

缺点:

1.容易陷入局部最小

2.算法收敛速度慢

3.网络结构的选择,过大容易过拟合,过小容易不收敛

4.太依赖典型样本,需要大量的典型样本