基于帝企鹅算法优化BP神经网络实现数据预
治疗白癜风去哪家医院 https://yyk.39.net/hospital/89ac7_detail.html1算法介绍 1.1BP神经网络 1、反向传播算法应用领域 反向传播算法应用较为广泛,从字面意思理解,与前向传播相互对应。在简单的神经网络中,反向传播算法,可以理解为最优化损失函数过程,求解每个参与运算的参数的梯度的方法。在前馈神经网络中,反向传播从求解损失函数偏导过程中,步步向前求解每一层的参数梯度。在卷积神经网络中,反向传播可以求解全连接层的参数梯度。在循环神经网络中,反向传播算法可以求解每一个时刻t或者状态t的参数梯度(在RNN\LSTM\GRU中,反向传播更多是BPTT)。笔者如今对于BP的理解,认为是在优化损失函数或者目标函数过程中,求解参与运算的参数的梯度方法,是一种比较普遍的说法。 、准备知识--反向传播(BP)算法应用于神经网络 反向传播(BP)算法在深度学习中,应用广泛。这里仅以前馈神经网络中的BP算法作为介绍。神经网络是一个由输入层、隐藏层、输出层三部分组成的网络,如图(1):数据从输入层,经过权重值和偏置项的线性变换处理,再通过激活层,得到隐藏层的输出,也即下一层的输入;隐藏层到输出层之间是,经过权重值和偏置项的线性变换,之后通过激活层,得到输出层。 图表示一个网络层为的前馈神经网络:一个隐藏层,一个输出层;隐藏单元为5,记输入层到隐藏层的权重值为W,偏置项为b1,激活函数为g1,隐藏层到输出层的权重值为V,偏置项为b,激活函数为g,则图的模型即为: 图是一个比较简单的神经网络,通常,我们见到的神经网络,是具有多个隐藏层的网络,如图:这是一个隐藏层个数为N个,每层隐藏单元数为5的神经网络。(PS:隐藏层设计,可以考虑层数设计和隐藏单元设计,可根据自己的需要自行设计。) 从输入层到隐藏层再到输出层,这一向前传递的过程,我们称之为前向传播。前向传播过程,往往是我们设定模型的过程,也可以理解为设定数学表达式或者列方程的过程。 、BP算法原理及其实施步骤 BP算法的核心思想:使用梯度下降来搜索可能的权向量的假设空间,以找到最佳的拟合样例的权向量。具体而言,即利用损失函数,每次向损失函数负梯度方向移动,直到损失函数取得最小值。 或者说,反向传播算法,是根据损失函数,求出损失函数关于每一层的权值及偏置项的偏导数,也称为梯度,用该值更新初始的权值和偏置项,一直更新到损失函数取得最小值或是设置的迭代次数完成为止。以此来计算神经网络中的最佳的参数。 这便是BP算法的一个具体步骤,下面我们详细介绍BP算法步骤中的每一步: 步骤1)初始化参数值(输出单元权值、偏置项和隐藏单元权值、偏置项均为模型的参数),是为激活前向传播,得到每一层元素的输出值,进而得到损失函数的值。参数初始化,可以自己设定,也可以选择随机生成;一般情况下,自己写代码或者调用tensorflow或keras时,都是随机生成参数。因为初始参数对最终的参数影响不大,只会影响迭代的次数。 1.帝企鹅算法部分代码%%01.9.AFO算法优化神经网络%01.9.AFOalgorithmoptimizesneuralnetworkweightsandthresholds%%这是使用原始算法的直接求解结果,添加专用于本问题的更新方式可以进一步提高精度%Thisisthedirectresultofusingtheoriginalalgorithm,%addingsomespecificupdatemethodstothisproblemcanfurtherimprovetheaccuracyclc;clear;closeall;warningoff%%固定随机数种子noRNG=1;rng(default)rng(noRNG)%%载入数据%%数据预处理loadinputloadoutput%%data.x=[input];data.y=[output];num_Train=10;%训练集数量data.len_train=num_Train;num_Test=48;%测试集数量index=randperm(num_Train+num_Test);%随机乱序data.train_x=data.x(:,index(1:num_Train));data.train_y=data.y(:,index(1:num_Train));data.test_x=data.x(:,index(num_Train+1:end));data.test_y=data.y(:,index(num_Train+1:end));%归一化[data.train_x0,option.ps_x]=mapminmax(data.train_x);data.train_x0=data.train_x0;[data.train_y0,option.ps_y]=mapminmax(data.train_y);data.train_y0=data.train_y0;data.test_x0=mapminmax(apply,data.test_x,option.ps_x);data.test_x0=data.test_x0;data.test_y0=mapminmax(apply,data.test_y,option.ps_y);data.test_y0=data.test_y0;%%data.weight=1;data=data;data.hiddenumber=[5];%隐含神经元数%%未优化神经网络clearresult[x(1,:),result(1)]=creat_x_1(option,data);%draw(result(1),未优化)data.m=result(1).m;data.n=result(1).n;data.m_lw=result(1).m_lw;data.n_lw=result(1).n_lw;data.m_iw=result(1).m_iw;data.n_iw=result(1).n_iw;data.m_b=result(1).m_b;data.n_b=result(1).n_b;data.len=result(1).len;[y(1),result(1)]=aimFcn_1(x(1,:),option,data,result(1).net);%%参数设置lb=-5;ub=5;option.lb=lb;option.ub=ub;dim=length(x(1,:));%%option.dim=dim;%八个决策变量lb=0;ub=1;option.lb=lb;option.ub=ub;iflength(option.lb)==1option.lb=ones(1,option.dim)*option.lb;option.ub=ones(1,option.dim)*option.ub;endoption.fobj= aimFcn_1;%option.fobj0=option.fobj;option.showIter=0;%%算法参数设置Parameters%基本参数option.numAgent=10;%种群个体数sizeofpopulationoption.maxIteration=;%最大迭代次数maximumnumberofinteration%帝企鹅算法option.v_lb=-(option.ub-option.lb)/4;option.v_ub=(option.ub-option.lb)/4;option.w=0.5;%weightofMovingstrategyIIIoption.w4=1;%weightofMovingstrategyIIIoption.w5=1;%weightofMovingstrategyIIIoption.pe=0.01;%ratetojudgePrematureconvergenceoption.gap0=ceil(sqrt(option.maxIteration*))+1;option.gapMin=5;%mingapoption.dec=;%decofgapoption.L=10;%Catastrophestr_legend=[{AFO1},{AFO}];%%Initializepopulationindividuals( |
转载请注明地址:http://www.diqiea.com/dqezqxz/9536.html
- 上一篇文章: 帝企鹅投研1013日
- 下一篇文章: 没有了