資源描述:
《bp神經(jīng)網(wǎng)絡(luò)matlab工具箱和matlab實現(xiàn)使用實例》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、BP神經(jīng)網(wǎng)絡(luò)matlab工具箱和matlab實現(xiàn)使用實例經(jīng)過最近一段時間的神經(jīng)網(wǎng)絡(luò)學習,終于能初步使用matlab實現(xiàn)BP網(wǎng)絡(luò)仿真試驗。這里特別感謝研友sistor2004的帖子《自己編的BP算法(工具:matlab)》和研友wangleisxcc的帖子《用C++,Matlab,F(xiàn)ortran實現(xiàn)的BP算法》前者幫助我對BP算法有了更明確的認識,后者讓我對matlab下BP函數(shù)的使用有了初步了解。因為他們發(fā)的帖子都沒有加注釋,對我等新手閱讀時有一定困難,所以我把sistor2004發(fā)的程序稍加修改后加
2、注了詳細解釋,方便新手閱讀。%嚴格按照BP網(wǎng)絡(luò)計算公式來設(shè)計的一個matlab程序,對BP網(wǎng)絡(luò)進行了優(yōu)化設(shè)計%yyy,即在o(k)計算公式時,當網(wǎng)絡(luò)進入平坦區(qū)時(<0.0001)學習率加大,出來后學習率又還原%v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);動量項clearallclcinputNums=3;%輸入層節(jié)點outputNums=3;%輸出層節(jié)點hideNums=10;%隱層節(jié)點數(shù)maxcount=20000;%最大迭代次數(shù)samplenum=3;%一個計數(shù)器,無意義
3、precision=0.001;%預(yù)設(shè)精度yyy=1.3;%yyy是幫助網(wǎng)絡(luò)加速走出平坦區(qū)alpha=0.01;%學習率設(shè)定值a=0.5;%BP優(yōu)化算法的一個設(shè)定值,對上組訓練的調(diào)整值按比例修改字串9error=zeros(1,maxcount+1);%error數(shù)組初始化;目的是預(yù)分配內(nèi)存空間errorp=zeros(1,samplenum);%同上v=rand(inputNums,hideNums);%3*10;v初始化為一個3*10的隨機歸一矩陣;v表輸入層到隱層的權(quán)值deltv=zeros(i
4、nputNums,hideNums);%3*10;內(nèi)存空間預(yù)分配dv=zeros(inputNums,hideNums);%3*10;w=rand(hideNums,outputNums);%10*3;同Vdeltw=zeros(hideNums,outputNums);%10*3dw=zeros(hideNums,outputNums);%10*3samplelist=[0.1323,0.323,-0.132;0.321,0.2434,0.456;-0.6546,-0.3242,0.3255];%3
5、*3;指定輸入值3*3(實為3個向量)expectlist=[0.5435,0.422,-0.642;0.1,0.562,0.5675;-0.6464,-0.756,0.11];%3*3;期望輸出值3*3(實為3個向量),有導(dǎo)師的監(jiān)督學習count=1;while(count<=maxcount)%結(jié)束條件1迭代20000次c=1;while(c<=samplenum)fork=1:outputNumsd(k)=expectlist(c,k);%獲得期望輸出的向量,d(1:3)表示一個期望向量內(nèi)的值e
6、ndfori=1:inputNumsx(i)=samplelist(c,i);%獲得輸入的向量(數(shù)據(jù)),x(1:3)表一個訓練向量字串4end%Forward();forj=1:hideNumsnet=0.0;fori=1:inputNumsnet=net+x(i)*v(i,j);%輸入層到隱層的加權(quán)和∑X(i)V(i)endy(j)=1/(1+exp(-net));%輸出層處理f(x)=1/(1+exp(-x))單極性sigmiod函數(shù)endfork=1:outputNumsnet=0.0;forj
7、=1:hideNumsnet=net+y(j)*w(j,k);endifcount>=2&&error(count)-error(count+1)<=0.0001o(k)=1/(1+exp(-net)/yyy);%平坦區(qū)加大學習率elseo(k)=1/(1+exp(-net));%同上endend%BpError(c)反饋/修改;errortmp=0.0;fork=1:outputNumserrortmp=errortmp+(d(k)-o(k))^2;%第一組訓練后的誤差計算enderrorp(c)=
8、0.5*errortmp;%誤差E=∑(d(k)-o(k))^2*1/2%end%Backward();fork=1:outputNumsyitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%輸入層誤差偏導(dǎo)字串5endforj=1:hideNumstem=0.0;fork=1:outputNumstem=tem+yitao(k)*w(j,k);%為了求隱層偏導(dǎo),而計算的∑endyitay(j)=tem*y(j)*(1-y(j));%隱層