目录

  • 1 网络创建、训练与仿真函数
    • 1.1 网络创建:newff
    • 1.2 网络训练:train
    • 1.3 仿真预测:sim
    • 1.4 网络保存及加载:save、load
  • 2 其他函数
    • 2.1 数据归一化:mapminmax
      • 2.1.1 归一化
      • 2.1.2 “应用”归一化
      • 2.1.3 “反”归一化
    • 2.2 网络训练算法
    • 2.3 提高网络的泛化能力
      • 2.3.1 贝叶斯归一化法:trainbr
      • 2.3.2 提前终止法
  • 3 一个完整例子
  • 4 参考文献

  BP神经网络的算法原理可参考各种书籍(如《西瓜书》、《神经网络模型及其MATLAB仿真程序设计》等)或者博客(如 《零基础入门深度学习(3) - 神经网络和反向传播算法》等),本文不再赘述—— 本文力求使用Matlab工具箱函数快速搭建BP神经网络模型并用于实战!

1 网络创建、训练与仿真函数

1.1 网络创建:newff

  Matlab中使用 net=newff(PR,[S1,S2,...],{TF1,TF2,...},BTF,BLF,PF); 创建BP神经网络,各参数的含义如下:

  1. net:创建的BP网络(结构体)。
  2. PR:输入样本范围(R,2),R为特征数。通常以minmax获取;
  3. [S1,S2,...]:隐层、输出层神经元数;
  4. [TF1,TF2,...]:激活(传输)函数(如tansig(logsig),purelin,poslin(ReLU));
  5. BTF:网络训练函数(default=traingdx);
  6. BLF:网络学习函数(default=learngdm);
  7. PF:网络性能函数(default=mse)。

1.2 网络训练:train

  Matlab中使用 [net,tr,Y,E,Pf,Af]=train(net,P,T,Pi,Ai,VV,TV); 训练网络,各参数的含义如下:
  1. net:训练后的BP网络;
  2. tr:训练记录,如训练次数net.epoch、训练误差性能net.perf等;
  3. Y:网络输出(S*Q神经元数*样本数);
  4. E:网络误差;
  5. Pf:最终输入延迟;
  6. Af:最终层延迟。
  7. net :BP网络模型;
  8. P:输入(R*Q特征数*样本数);
  9. T:期望(或输出。S*Q,即神经元数*样本数);
  10. Pi:初始输入延迟;
  11. Ai:初始层延迟;
  12. VV:验证集(结构体);
  13. TV:测试集(结构体)。

1.3 仿真预测:sim

  Matlab中使用 [Y,Pf,Af,E,perf]=sim(net,P,Pi,Ai,T); 仿真预测,各参数含义如下:
  1. Y:拟合或预测值(S*Q);
  2. Pf:最终输入延迟;
  3. Af:最终层延迟;
  4. E:网络误差(S*Q);
  5. perf:网络性能。
  6. net:BP网络模型;
  7. P:拟合或预测输入;
  8. Pi:初始输入延迟;
  9. Ai:初始层延迟;
  10. T:拟合或预测期望。

1.4 网络保存及加载:save、load

  Matlab中使用 save 'E:\Matlab Codes\netName' net; 保存网络模型(网络训练完毕之后);使用 load 'E:\Matlab Codes\netName' net; 加载网络模型(加载训练好的模型进行仿真预测)。

2 其他函数

2.1 数据归一化:mapminmax

2.1.1 归一化

  将X每行数据归一化至YMIN,YMAX之间:[Y,PS] = mapminmax(X,YMIN,YMAX)。其中,Y为归一化结果,PS为归一化信息(结构体);YMIN,YMAX为每行的范围。也可将YMIN,YMAX构造为结构体FP(即FP.YMIN,FP.YMAX)。示例如下:

2.1.2 “应用”归一化

  将X按归一化信息PS(结构体)进行归一化:Y = mapminmax('apply',X,PS)。其中,Y为归一化结果;PS为归一化信息。此用法一般用来 按归一化训练数据方式归一化测试数据 。示例如下:

2.1.3 “反”归一化

  将Y按归一化信息PS(结构体)进行 反归一化X = mapminmax(‘reverse’,Y,PS)。其中,X为反归一化结果;PS为归一化信息。此用法一般用来 反归一化网络拟合或预测结果 。示例如下:

2.2 网络训练算法

  Matlab工具箱中的BP网络训练算法可按如下原则选取:
  ①中等网络(数百权值)、函数逼近、最大存储空间:LM算法(trainlm)
  ②模式识别、(最小)存储空间较小:弹性BP算法(trainrp)
  ③问题普适(拟合或分类)、大型网络、较小存储空间:变梯度SCG算法(trainscg)
  ④某些问题有效、速度较慢、最小存储空间:变学习率算法(traingdx、traingda)
  详情可参考:周开利,康耀红.神经网络模型及其MATLAB仿真程序设计[M].北京:清华大学出版社,2005.

2.3 提高网络的泛化能力

2.3.1 贝叶斯归一化法:trainbr

  使用贝叶斯归一化法可 自动修正网络误差性能函数(自适应误差性能调整率) ,使网络获得较小的权值(W)和阈值(b),从而迫使网络响应趋于平滑,减小 “过适配”
  贝叶斯归一化法使用方式为:net=newff(PR,[S1,S2,...],{TF1,TF2,...},trainbr,BLF,PF);,其收敛停机条件为:Maximum MU reached或者SSE(平方和误差)和SSW(平方和权值)基本不再变化。示例如下:

clc;clear;
% 样本数据
p_train=-pi:0.1:pi;
sinCurve=sin(p_train);
t_train=sin(p_train)+0.1*rand(size(p_train));
% 网络创建
net=newff(minmax(p_train),[15,1],{'tansig','purelin'},'traingd'); %最速下降BP算法
net.trainParam.show=50; %显示训练过程
net.trainParam.lr=0.01; %学习率
net.trainParam.epochs=1000; %最大迭代次数
net.trainParam.goal=1.0e-5; %性能目标
% 网络训练
[net,tr]=train(net,p_train,t_train);
% 网络仿真
t_sim=sim(net,p_train);
% 结果展示
plot(p_train,t_train,'b*',p_train,t_sim,'r-',p_train,sinCurve,'k:');
legend('实际值','拟合值','sin曲线');

  拟合结果如下:

  使用 贝叶斯归一化法 训练网络,其拟合结果为:

  由图可知,后者的泛化能力更强,网络未出现过拟合现象。

2.3.2 提前终止法

  提前终止法的本质是 交叉验证 。将原始样本数据分成 训练集验证集(或测试集),在训练初始阶段,验证集误差正常地减小,也即训练集的误差;而在网络开始出现“过适配”时,验证集误差开始增加,当其连续增加的次数达到指定的迭代次数时,训练便被终止。此时,网络返回具有最小验证集误差的权值和阈值(偏置)。
  提前终止法示例如下:

clc;clear;
% 样本数据
p_train=-1:0.05:1; %训练集
t_train=sin(2*pi*p_train)+0.1*rand(size(p_train));
sinCurve=sin(2*pi*p_train);
val.P=-0.975:0.05:0.975; %验证集
val.T=sin(2*pi*val.P)+0.1*rand(size(val.P));
% 网络创建
net=newff(minmax(p_train),[20,1],{'tansig','purelin'},'traingdx'); %学习率可变的动量BP算法
net.trainParam.show=25; %显示训练过程
net.trainParam.epochs=300; %最大迭代次数
% 网络训练
net=init(net);
[net,tr]=train(net,p_train,t_train,[],[],val);
% 网络仿真
t_sim=sim(net,p_train);
% 结果展示
plot(p_train,t_train,'b*',p_train,t_sim,'r-',p_train,sinCurve,'k:');
xlabel('x');ylabel('y')
legend('实际值','拟合值','sin曲线');

  结果如下:

  由图可知,网络可有效地避免“过适配”现象。

3 一个完整例子

clc;clear;%%(1)训练测试数据(特征数R*样本数Q)
P_train=[-1,-1,2,2,4;0,5,0,5,7]; %R*Q
[PN_train,ps_input]=mapminmax(P_train,-1,1); %训练输入归一化
T_train=[-1,-1,1,1,-1]; %S*Q
[TN_train,ps_output]=mapminmax(T_train,-1,1);
P_test=[-1,-1,2,2,4;0,5,0,5,7];
PN_test=mapminmax('apply',P_test,ps_input); %测试输入归一化
T_test=[-1,-1,1,1,-1];%%(2)构建网络并设置训练参数
%net=newff(PR,[S1,S2,...],{TF1,TF2,...},BTF,BLF,PF); %输入样本范围(R,2);隐层、输出层神经元数;激活(传输)函数;网络训练函数(traingdx);网络学习函数(learngdm);性能函数(mse)
%1)TF:tansig(logsig),purelin,poslin(ReLU);2)BTF:trainlm(中等网络函数逼近/存储空间大),traingdx、traingda(某些问题有效/速度慢),trainscg(大型网络通用),trainrp(模式识别),trainbr(贝叶斯归一化法提高泛化能力)
net=newff(minmax(PN_train),[5,1],{'tansig','purelin'},'traingdx');
net.trainParam.show=50; %显示训练过程
net.trainParam.lr=0.05; %学习率
net.trainParam.epochs=300; %最大迭代次数
net.trainParam.goal=1.0e-5; %性能目标%%(3)网络训练
%[net,tr,Y,E,Pf,Af]=train(net,P,T,Pi,Ai,VV,TV); %1)网络,训练记录(epoch,perf),网络输出,网络误差,最终输入延迟,最终层延迟;2)网络,输入,期望,初始输入延迟,初始层延迟,确认样本结构([]),测试样本结构([])
[net,tr]=train(net,PN_train,TN_train);
%save 'E:\Matlab Codes\netName' net; %保存网络%%(4)训练结果:T=TF2(W2*TF1(W1*P+B1)+B2)
W1=net.IW{1,1}; %输入层到隐层权值
B1=net.b{1,1}; %隐层神经元偏置(阈值)
W2=net.LW{2,1}; %隐层到输出层权值
B2=net.b{2,1}; %输出层神经元偏置%%(5)网络仿真预测
%[Y,Pf,Af,E,perf]=sim(net,P,Pi,Ai,T); %1)网络拟合/预测值,最终输入延迟,最终层延迟,网络误差,网络性能;2)网络,预测输入,初始输入延迟,初始层延迟,预测期望
%load 'E:\Matlab Codes\netName' net; %加载网络
TN_sim=sim(net,PN_test);
T_sim=mapminmax('reverse',TN_sim,ps_output); %测试结果反归一化%%(6)结果展示
plotperform(tr); %训练性能
testNumber=length(T_test);
plot(1:testNumber,T_sim,'ro',1:testNumber,T_test,'b-');

4 参考文献

  1. 周开利,康耀红.神经网络模型及其MATLAB仿真程序设计[M].北京:清华大学出版社,2005.
  2.丛爽.面向MATLAB工具箱的神经网络理论与应用[M].合肥:中国科学技术大学出版社,2009.

Matlab训练BP神经网络的一般步骤相关推荐

  1. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板+语音播报)【含Matlab源码 1220期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  2. matlab关于bp神经网络,关于matlab的BP神经网络

    其他回答(7) buzhuangweng 高分答主 02-01 TA获得超过7907个赞 P.T矩阵均为一列为一个样本,因此P.T的列数必须相等,否则报错.你参考下别人的程序,我建议使用newff函数 ...

  3. 【车牌识别】基于matlab GUI BP神经网络车牌识别(带面板)【含Matlab源码 790期】

    ⛄一.BP车牌识别简介(附课程作业报告) 车牌识别系统设计与实现 车牌识别系统主要分为三部分:车牌图像预处理.特征提取以及基于BP神经网络对特征进行训练和分类,流程图如图1所示. 图1 车牌识别系统组 ...

  4. MATLAB练习——BP神经网络预测成绩

    数据整理 假设原成绩单如下,共29人,25门课: 要预测其中一门概率论的成绩.(我的那一行) 每一列是一组输入训练集,行数代表输入层神经元个数,列数代表输入训练集组数,导入MATLAB 由于是要预测其 ...

  5. MATLAB实现BP神经网络预测汽油辛烷值

    MATLAB实现BP神经网络预测汽油辛烷值 今天学习的新内容,在这里记录一下便于日后复习 1.清空变量,做好准备工作 %% I. 清空环境变量 clear all clc 2.导入数据,划分前50个为 ...

  6. bp 预测 matlab代码,bp神经网络进行交通预测的Matlab源代码.docx

    %bp神经网络进行交通预测的Matlab源代码% BP 神经网络用于预测% 使用平台 - Matlab7.0% 数据为1986年到2000年的交通量 ,网络为3输入,1输出% 15组数据,其中9组为正 ...

  7. 机器学习 | MATLAB实现BP神经网络newff参数设定(下)

    机器学习 | MATLAB实现BP神经网络newff参数设定(下) 目录 机器学习 | MATLAB实现BP神经网络newff参数设定(下) 基本介绍 程序设计 参考资料 致谢 基本介绍 newff搭 ...

  8. 机器学习 | MATLAB实现BP神经网络newff参数设定(上)

    机器学习 | MATLAB实现BP神经网络newff参数设定(上) 目录 机器学习 | MATLAB实现BP神经网络newff参数设定(上) 基本介绍 程序设计 参考资料 致谢 基本介绍 newff搭 ...

  9. 机器学习 | MATLAB实现BP神经网络newff参数设定(中)

    机器学习 | MATLAB实现BP神经网络newff参数设定(中) 目录 机器学习 | MATLAB实现BP神经网络newff参数设定(中) 基本介绍 程序设计 参考资料 致谢 基本介绍 newff搭 ...

  10. 【智能控制实验】基于MATLAB的BP神经网络设计

    实验五:基于MATLAB的BP神经网络设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理和代码设计方法,应用MATLAB编写BP神经网络训练方法:应用神经网络工具箱设计BP神经网络实现对输入输 ...

最新文章

  1. 香港中文大学(深圳)罗元教授招收计算机与信息工程全奖博士
  2. 丙类放大电路实验报告_电子工程师入门基础:那些关于电子电路设计的基础知识...
  3. 从数据库备份创建数据库
  4. python教程:文件读写
  5. getComputedStyle方法的那些事
  6. echart 饼图每一块间隙_花10分钟做酱香饼,简单方便又美味,酥脆咸香比买的还要好吃...
  7. [css] 举例说明伪类:focus-within的用法
  8. java 替换 rn_RN热更新之Android篇
  9. 【HDU】1695 GCD
  10. arrays中copyof复制两个数组_Core Java - Arrays
  11. Atitit.业务系统的新特性 开发平台 新特性的来源总结
  12. 上帝掷骰子吗--量子物理史话
  13. 细胞自动机_神经细胞自动机用于艺术娱乐
  14. MATLAB学习八(二):标准差std
  15. Visio 2003 sp3下载
  16. RS-232与RS485通信方式区别
  17. vue项目中实现输入框防抖功能
  18. python入门教程陈孟林_Python快速入门指南,没基础没关系
  19. js事件冒泡和传播详细解释
  20. 数据中心液冷方式优缺点对比及浸没式液冷表面强化处理

热门文章

  1. 计算机网络安全 第一章绪论
  2. 华为hg255d+Openwrt锐捷认证在某农业公园
  3. perl语言十分钟入门【零基础可入】
  4. java零基础自学首选黑马程序员Java入门教程笔记01
  5. JSON编码MySQL结果
  6. 开源hr系统 java_微人事-前后端分离的人力资源管理系统-江南一点雨
  7. Java数据库编程技术 第四章习题
  8. 富文本(vue3)SQL格式化 JSON格式化
  9. 廖雪峰python教程答案-廖雪峰老师Python3教程练习整理
  10. C# 使用微信扫码登录网页