資源簡介
BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序BP 神經網絡程序

代碼片段和文件信息
%嚴格按照BP網絡計算公式來設計的一個matlab程序,對BP網絡進行了設計
%yyy,即在o(k)計算公式時,當網絡進入平坦區時(<0.0001)學習率加大,出來后學習率又還原
%v(ij)=v(ij)+deltv(ij)+a*dv(ij);動量項
clear?all
inputnums=1;%輸入層節點
outputnums=1;%輸出層節點
hidenums=7;%隱層節點
maxcount=50000;%最大迭代次數
samplenum=19;%一個計數器,無意義
precision=0.00001;%預設精度
yyy=1.3;%yyy是幫助網絡加速走出平坦區
alpha=0.02;%學習率設定值
a=0.9;%BP優化算法的一個設定值,對上組訓練的調整值按比例修改
error=zeros(1maxcount+1);%error數組初始化;目的是預分配內存空間
errorp=zeros(1samplenum);%同上
v=rand(inputnumshidenums);%1*10;v初始化為一個1*10的隨機歸一矩陣;v表輸入層到隱層的權值
deltv=zeros(inputnumshidenums);%1*10;內存空間預分配
dv=zeros(inputnumshidenums);%1*10;
w=rand(hidenumsoutputnums);%10*1
deltw=zeros(hidenumsoutputnums);%10*1
dw=zeros(hidenumsoutputnums);%10*1
samplelist=1:0.5:10;%樣本輸入值
expectlist=samplelist.^(-1);%期望輸出值
%expectlist=exp(-samplelist);
[samplelistminpmaxp]=premnmx(samplelist);
%[expectlistmintmaxt]=premnmx(expectlist);
count=1;
while(count<=maxcount)%結束條件1迭代20000次
????c=1;
????while(c<=samplenum)
????????for?k=1:outputnums
????????????d(k)=expectlist(c);%獲得期望輸出的向量
????????end
????????for?i=1:inputnums
????????????x(i)=samplelist(c);%獲得輸入的向量數據
????????end
????????
????????%forward();
????????for?j=1:hidenums
????????????net=0.0;
????????????for?i=1:inputnums
????????????????net=net+x(i)*v(ij);%輸入層到隱層的加權和
????????????end
????????y(j)=1/(1+exp(-net));%輸出層處理f(x)=1/(1+exp(-x)),單極性sigmiod函數
???????????????%y(j)=1/net;%輸出層處理f(x)=1/(1+exp(-x)),單極性sigmiod函數
????????end
????????for?k=1:outputnums
????????????net=0.0;
????????????for?j=1:hidenums
????????????????net=net+y(j)*w(jk);
????????????end
????????????if?count>=2&&error(count)-error(count-1)<=0.0001
???????????????o(k)=1/(1+exp(-net)/yyy);%平坦區加大學習率
?????????????????%o(k)=1/(net/yyy);%平坦區加大學習率
???????????else?o(k)=1/(1+exp(-net));%同上
????????????????%else?o(k)=1/net;%同上
????????????end
????????end
????????
????????%BpError(c)反饋/修改
????????errortmp=0.0;
????????for?k=1:outputnums
????????????errortmp=errortmp+(d(k)-o(k))^2;%第一組訓練后的誤差計算
????????end
????????errorp(c)=0.5*errortmp;%誤差E=∑(d(k)-o(k))^2?*?1/2?
????%end
????%backward();
????for?k=1:outputnums
????????yitao(k)=(d(k)-o(k))*o(k)*(1-o(k));%輸出層誤差偏導
????end
????for?j=1:hidenums
????????tem=0.0;
????????for?k=1:outputnums
????????????tem=tem+yitao(k)*w(jk);%為了求隱層偏導,而計算的求和
????????end
????????yitay(j)=tem*y(j)*(1-y(j));%隱層偏導
????end
????
????%調整各層權值
????for?j=1:hidenums
????????for?k=1:outputnums
????????????deltw(jk)=alpha*yitao(k)*y(j);%權值w的調整量deltw(已乘學習率)
????????????w(jk)=w(jk)+deltw(jk)+a*dw(jk);%權值調整,這里的dw=deltw(t-1),實際是對BP算法的一個改進措施--增加動量項目的是提高訓練速度
????????????dw(jk)=deltw(jk);
????????end
????end
????for?i=1:inputnums
????????for?j=1:hidenums
????????????deltv(ij)=alpha*yitay(j)*x(i);%同上deltw
????????????v(ij)=v(ij)+deltv(ij)+a*dv(ij);
????????????dv(ij)=deltv(ij);
????????end
????end
????c=c+1;
????end%第二個while結束;表示一次BP訓練結束
????double?tmp;
????tmp=0.0;
????for?i=1:samplenum
????????tmp=tmp+error
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????751104??2008-01-05?16:01??神經網絡程序1\M.doc
?????文件???????4419??2008-01-04?16:57??神經網絡程序1\xfenzhiyibp.m
?????文件????????225??2007-12-20?09:31??神經網絡程序1\人工神經網絡要求.txt
?????目錄??????????0??2009-10-01?14:23??神經網絡程序1
-----------?---------??----------?-----??----
???????????????755748????????????????????4
- 上一篇:.net機票預訂系統源碼
- 下一篇:MEF模塊解耦WCF Rest 擴展 基礎
評論
共有 條評論