BP神经网络matlab实现和matlab工具箱使用实例经过最近一段时间的神经网络学习,终于能初步使用matlab实现BP网络仿真试验。这里特别感谢研友sistor2004的帖子《自己编的BP算法(工具:matlab)》和研友wa
gleisxcc的帖子《用C,Matlab,Fortra
实现的BP算法》前者帮助我对BP算法有了更明确的认识,后者让我对matlab下BP函数的使用有了初步了解。因为他们发的帖子都没有加注释,对我等新手阅读时有一定困难,所以我把sistor2004发的程序稍加修改后加注了详细解释,方便新手阅读。严格按照BP网络计算公式来设计的一个matlab程序对BP网络进行了优化设计yyy,即在ok计算公式时,当网络进入平坦区时00001学习率加大,出来后学习率又还原vijvijdeltvijadvij动量项clearallclci
putNums3输入层节点outputNums3输出层节点hideNums10隐层节点数maxcou
t20000最大迭代次数sample
um3一个计数器,无意义precisio
0001预设精度yyy13yyy是帮助网络加速走出平坦区alpha001学习率设定值a05BP优化算法的一个设定值,对上组训练的调整值按比例修改字串9errorzeros1maxcou
t1error数组初始化;目的是预分配内存空间errorpzeros1sample
um同上vra
di
putNumshideNums310v初始化为一个310的随机归一矩阵v表输入层到隐层的权值deltvzerosi
putNumshideNums310内存空间预分配dvzerosi
putNumshideNums310wra
dhideNumsoutputNums103同VdeltwzeroshideNumsoutputNums103dwzeroshideNumsoutputNums103samplelist0132303230132032102434045606546032420325533指定输入值33实为3个向量expectlist05435042206420105620567506464075601133期望输出值33实为3个向量,有导师的监督学
习
cou
t1whilecou
tmaxcou
t结束条件1迭代20000次
fc1whilecsample
umfork1outputNumsdkexpectlistck获得期望输出的向量d13表示一个期望向量内的值e
dfori1i
putNumsxisamplelistci获得输入的向量(数据)x13表一个训练向量字串4
e
dForwardforj1hideNums
et00fori1i
putNums
et
etxivij输入层到隐层的加权和∑XiVie
dyj11exp
et输出层处理fx11expx单极性sigmiod函数e
dfork1outputNums
et00forj1hideNums
et
etyjwjke
difcou
t2errorcou
terrorcou
t100001ok11exp
etyyy平坦区加大学习率elseok11exp
et同上e
de
dBpErrorc反馈修改errortmp00fork1outputNumserrortmperrortmpdkok2第一组训练后的误差计算e
derrorpc05errortmp误差E∑dkok212e
dBackwardfork1our