赞
踩
最近刚开始学习神经网络,感觉一开始接触浅浅的理解是没问题的,但是深层次理解还是需要不断地实践。BP是一种前馈的运行,但是可以将误差反馈回去;根据梯度下降法来不断的调整权值(容易陷入局部最小值),直到最后得到的数据可以满足需求;大家可以看一下newff函数的用法matlab详解newff(前馈反向传播网络)_xiaotao_1的博客-CSDN博客_matlab newffz
感觉这个讲解的很好,要把里面的参数弄明白;
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.太依赖典型样本,需要大量的典型样本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。