本文内容为将遗传算法与BP神经网络算法相结合,优化神经网络的权值阈值

BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。其具有结构简单,可调整的参数多,训练算 法好等优点。据统计,80以上的神经网络模型都是采用了BP网络或其变形。但其也具有学习收敛速度太慢、不能保证收敛到全局最小点等缺陷。

我们忽略实际工程问题背景,直接引入9组样本数据,每组样本数据含有15个变量(输入参数)。其结果(输出参数)为三种,我们分别用(1,0,0)、(0,1,0)和(0,0,1)来表示。同时为了对训练好的网络进行测试,另有三组新数据作为网络的测试数据。

样本数据和测试数据如下:

%%样本数据
%%样本输入参数
0.2286    0.2090    0.0442    0.2603    0.3690    0.0359    0.1759    0.0724   0.2634
0.1292    0.0947    0.0880    0.1715    0.2222    0.1149    0.2347    0.1909   0.2258
0.0720    0.1393    0.1147    0.0702    0.0562    0.1230    0.1829    0.1340   0.1165
0.1592    0.1387    0.0563    0.2711    0.5157    0.5460    0.1811    0.2409   0.1154
0.1335    0.2558    0.3347    0.1491    0.1872    0.1977    0.2922    0.2842   0.1074
0.0733    0.0900    0.1150    0.1330    0.1614    0.1248    0.0655    0.0450   0.0657
0.1159    0.0771    0.1453    0.0968    0.1425    0.0624    0.0774    0.0824   0.0610
0.0940    0.0882    0.0429    0.1911    0.1506    0.0832    0.0227    0.1064   0.2623
0.0522    0.0393    0.1818    0.2545    0.1310    0.1640    0.2056    0.1909   0.2588
0.1345    0.1430    0.0378    0.0871    0.0500    0.1002    0.0925    0.1586   0.1155
0.0090    0.0126    0.0092    0.0060    0.0078    0.0059    0.0078    0.0116   0.0050
0.1260    0.1670    0.2251    0.1793    0.0348    0.1503    0.1852    0.1698   0.0978
0.3619    0.2450    0.1516    0.1002    0.0451    0.1837    0.3501    0.3644   0.1511
0.0690    0.0508    0.0858    0.0789    0.0707    0.1295    0.1680    0.2718   0.2273
0.1828    0.1328    0.0670    0.0909    0.0880    0.0700    0.2668    0.2494   0.3220
%%样本输出参数
1,0,0     1,0,0     1,0,0     0,1,0     0,1,0     0,1,0     0,0,1     0,0,1    0,0,1%%测试数据
%%测试输入参数
0.2101    0.2593    0.2599
0.0950    0.1800    0.2235
0.1298    0.0711    0.1201
0.1359    0.2801    0.0071
0.2601    0.1501    0.1102
0.1001    0.1298    0.0683
0.0753    0.1001    0.0621
0.0890    0.1891    0.2597
0.0389    0.2531    0.2602
0.1451    0.0875    0.1167
0.0128    0.0058    0.0048
0.1590    0.1803    0.1002
0.2452    0.0992    0.1521
0.0512    0.0802    0.2281
0.1319    0.1002    0.3205
%%测试输出参数
1,0,0     0,1,0     0,0,1
BP网络算法的实现:
  • 网络创建

对于本实例而言,样本有15个输入参数,3个输出参数。故我们取输入层神经元n1个数为15,输出层神经元n3个数为3。而隐含层神经网络个数n2由其与输入层神经元个数关系,得到其值为31。

其中权值个数为15×31+31×3=58815\times31+31\times3=58815×31+31×3=588,阈值个数为31+3=3431+3=3431+3=34。所以遗传算法优化参数的个数为592。

神经网络的隐含层神经元的传递函数采用S型正切函数tansig(),输出层神经元的传递函数采用S型对数函数logsig()。P为输入样本矩阵,则创建网络可以用代码:

net=newff(minmax(P),[hiddennum,outputnum],{'tansig','logsig'},'trainlm');
  • 网络训练和测试

网络训练是不断修正权值和阈值的过程,使误差越来越小。训练函数为train()。通过以下代码进行网络参数设置和调用函数。代码如下:

%% 设置网络参数:训练次数为1000,训练目标为0.01,学习速率为0.1
net.trainParam.epochs=1000;
net.trainParam.goal=0.01;
LP.lr=0.1;
net.trainParam.show=NaN;

网络训练之后,再对网络进行测试。P_test为测试数据。测试代码如下:

Y=sim(net,P_test);
遗传算法的实现:

实例使用谢菲尔德工具箱,实现种群初始化,适应度函数,选择、交叉、变异和重插来优化BP神经网络中的权值和阈值。其中参数有:种群大小为40,遗传迭代次数为50,变量二进制位数为10,交叉概率设置为0.7,变异概率设置为0.01,代沟设置为0.95。


MATLAB程序实现:

案例将神经网络算法中预测样本所得到的误差值的范数座位遗传算法中的目标函数。误差越小则表示网络的预测精度越高,在遗传算法部分得到的该个体的适应度值也越大。

神经网络算法代码:
function err=Bpfun(x,P,T,hiddennum,P_test,T_test)
%% 训练&测试BP网络
%% 输入
% x:一个个体的初始权值和阈值
% P:训练样本输入
% T:训练样本输出
% hiddennum:隐含层神经元数
% P_test:测试样本输入
% T_test:测试样本期望输出
%% 输出
% err:预测样本的预测误差的范数inputnum=size(P,1);       % 输入层神经元个数
outputnum=size(T,1);      % 输出层神经元个数
%% 新建BP网络
net=newff(minmax(P),[hiddennum,outputnum],{'tansig','logsig'},'trainlm');
%% 设置网络参数:训练次数为1000,训练目标为0.01,学习速率为0.1
net.trainParam.epochs=1000;
net.trainParam.goal=0.01;
LP.lr=0.1;
net.trainParam.show=NaN;
% net.trainParam.showwindow=false;  %高版MATLAB
%% BP神经网络初始权值和阈值
w1num=inputnum*hiddennum; % 输入层到隐层的权值个数
w2num=outputnum*hiddennum;% 隐层到输出层的权值个数
w1=x(1:w1num);   %初始输入层到隐层的权值
B1=x(w1num+1:w1num+hiddennum);  %初始隐层阈值
w2=x(w1num+hiddennum+1:w1num+hiddennum+w2num); %初始隐层到输出层的阈值
B2=x(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum); %输出层阈值
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=reshape(B2,outputnum,1);
%% 训练网络以
net=train(net,P,T);
%% 测试网络
Y=sim(net,P_test);
err=norm(Y-T_test);
遗传算法主函数:
%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出T
%样本数据就是前面问题描述中列出的数据
load data
% 初始隐层神经元个数
hiddennum=31;
% 输入向量的最大值和最小值
threshold=[0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1;0 1];
inputnum=size(P,1);       % 输入层神经元个数
outputnum=size(T,1);      % 输出层神经元个数
w1num=inputnum*hiddennum; % 输入层到隐层的权值个数
w2num=outputnum*hiddennum;% 隐层到输出层的权值个数
N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数%% 定义遗传算法参数
NIND=40;        %个体数目
MAXGEN=50;      %最大遗传代数
PRECI=10;       %变量的二进制位数
GGAP=0.95;      %代沟
px=0.7;         %交叉概率
pm=0.01;        %变异概率
trace=zeros(N+1,MAXGEN);                        %寻优结果的初始值FieldD=[repmat(PRECI,1,N);repmat([-0.5;0.5],1,N);repmat([1;0;1;1],1,N)];   %区域描述器
Chrom=crtbp(NIND,PRECI*N);                      %初始种群
%% 优化
gen=0;                                 %代计数器
X=bs2rv(Chrom,FieldD);                 %计算初始种群的十进制转换
ObjV=Objfun(X,P,T,hiddennum,P_test,T_test);        %计算目标函数值
while gen<MAXGENfprintf('%d\n',gen)FitnV=ranking(ObjV);                              %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP);              %选择SelCh=recombin('xovsp',SelCh,px);                  %重组SelCh=mut(SelCh,pm);                               %变异X=bs2rv(SelCh,FieldD);               %子代个体的十进制转换ObjVSel=Objfun(X,P,T,hiddennum,P_test,T_test);             %计算子代的目标函数值[Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代到父代,得到新种群X=bs2rv(Chrom,FieldD);gen=gen+1;                                             %代计数器增加%获取每代的最优解及其序号,Y为最优解,I为个体的序号[Y,I]=min(ObjV);trace(1:N,gen)=X(I,:);                       %记下每代的最优值trace(end,gen)=Y;                               %记下每代的最优值
end
%% 画进化图
figure(1);
plot(1:MAXGEN,trace(end,:));
grid on
xlabel('遗传代数')
ylabel('误差的变化')
title('进化过程')
bestX=trace(1:end-1,end);
bestErr=trace(end,end);
fprintf(['最优初始权值阈值:\nX=',num2str(bestX'),'\n最小误差err=',num2str(bestErr),'\n'])
最终结果:

最小误差范值err=0.05185。误差进化图如下:


需要源码请在文章下留言

遗传算法优化BP神经网络的实例相关推荐

  1. 基于Matlab的遗传算法优化BP神经网络在非线性函数拟合中的应用

    本微信图文详细介绍了遗传算法优化BP神经网络初始权值阈值的过程,并通过实例说明该优化能够提升BP神经网络的预测精确程度.

  2. 《MATLAB 神经网络43个案例分析》:第3章 遗传算法优化BP神经网络——非线性函数拟合

    <MATLAB 神经网络43个案例分析>:第3章 遗传算法优化BP神经网络--非线性函数拟合 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB 神经网 ...

  3. 美赛整理之遗传算法优化BP神经网络的齿轮故障诊断问题

    遗传算法优化BP神经网络的齿轮故障诊断问题 一.问题的提出 二.问题的分析 三.结果显示 一.问题的提出 二.问题的分析 ​ 这里给出了9组15维的向量,我们的目的就是要根据这9组数据来建立一个BP神 ...

  4. 遗传算法优化BP神经网络在非线性函数拟合中的应用

    遗传算法优化BP神经网络在非线性函数拟合中的应用 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法精确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.通常B ...

  5. 遗传算法优化BP神经网络出现输入参数不足,是什么原因啊,求大神指导,代码如下

    用遗传算法优化BP神经网络,在加粗那行出现输入参数不足,是什么原因啊,求大神指导,代码如下 function err=Bpfun(x,P,T,hiddennum,P_test,T_test) fid= ...

  6. 【Matlab风电功率预测】遗传算法优化BP神经网络风电功率预测【含源码 760期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]遗传算法优化BP神经网络风电功率预测[含源码 760期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  7. 量子遗传算法优化BP神经网络的预测和分类,多输入单输出,多输 入多输出

    量子遗传算法优化BP神经网络的预测和分类,多输入单输出,多输 入多输出 93499615192034876最爱matlab

  8. Matlab 遗传算法优化BP神经网络

    最近在学遗传算法优化BP神经网络,从新浪博客,Matlab中文论坛以及<MATLAB 神经网络43个案例分析>里看了许多资料, 存在着缺少test函数,以及函数名调用错误等问题.自编了te ...

  9. BP神经网络优化 | MATLAB基于遗传算法优化BP神经网络(GA-BP)的预测模型(含完整代码)

    文章目录 前言 一.遗传算法描述 二.优化思路 三.完整代码 预测结果 前言 首先需要安装一下遗传算法工具箱,可参考这篇博客 MATLAB遗传算法工具箱安装包及安装方法(图解)_周杰伦今天喝奶茶了吗的 ...

最新文章

  1. 企业批量部署RealVNC远程控制软件
  2. Canvas贝塞尔三级曲线
  3. MYSQL 实时升级
  4. 回文树笔记(转自quack_quack)
  5. $Django importlib与dir知识,手写配置文件, 配置查找顺序 drf分页器drf版本控制
  6. .md是什么文件_Element-UI源码阅读之md显示到页面
  7. java class api 中文乱码_SpringMVC之springmvc原始api,请求中文乱码问题
  8. Opencv中Mat的data数据只定义为uchar*类型,
  9. php访问c#接口,介绍C#中的接口
  10. 面试题--------10、索引是什么,有什么作用和优缺点
  11. 190316每日一句
  12. Python 科学计算基础 (整理)
  13. 通信线路工程验收规范_老杨一建通信学堂通信线路工程施工技术
  14. oracle现金流量表逻辑,财务学习:现金流量表内在逻辑研究
  15. 个人云存储的两大强者比拼 百度云VS苹果iCloud
  16. 机器人视觉系统分为哪几种,主要包括哪些关键技术?
  17. 二次函数顶点式计算机,二次函数公式:顶点式、交点式、两根式
  18. 贝叶斯法则的一个例题
  19. 一个游戏建模师一天的工作都在做什么?
  20. 微软客服的痛苦-还敢应聘微软客服

热门文章

  1. AI的下一主战场 —— 手机与物联网终端
  2. Chess Game Dataset (国际象棋游戏数据集)
  3. 穆迪分析在Chartis报告中被评为CLO解决方案类别领导者
  4. 什么是SCCP认证?POPS测试是什么?POPS-SCCP如何测试
  5. 电脑故障3000实例排查大全! 计算机报错大全
  6. 电子书 VS 纸质书
  7. Jquery的简单使用
  8. P4117 [Ynoi2018] 五彩斑斓的世界
  9. 深度学习 效果不好怎么办
  10. mysql提取日期中的年月