版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、using System;using System.Collections.Generic;using System.Linq;using System.Text;using System;using System.IO;using System.Text;namespace BpANNet/ / BpNet 的摘要說明。/ public class BpNetpublic int inNum;/輸入節(jié)點數(shù)int hideNum;/隱層節(jié)點數(shù)public int outNum;/輸出層節(jié)點數(shù)public int sampleNum;/樣本總數(shù)Random R;double x;/輸入節(jié)點的輸入
2、數(shù)據(jù)double x1;/隱層節(jié)點的輸出double x2;/輸出節(jié)點的輸出double o1;/隱層的輸入double o2;/輸出層的輸入public double , w;/權值矩陣w,這是輸入層與隱藏層之間的權值矩陣public double , v;/權值矩陣V,這是隱藏層與輸出層之間的權值矩陣public double , dw;/權值矩陣wpublic double , dv;/權值矩陣Vpublic double rate;/學習率public double b1;/隱層閾值矩陣public double b2;/輸出層閾值矩陣public double db1;/隱層閾值矩陣
3、public double db2;/輸出層閾值矩陣double pp;/隱藏層的誤差double qq;/輸出層的誤差double yd;/輸出層的教師數(shù)據(jù),所謂教師數(shù)據(jù)就是實際數(shù)據(jù)而已!public double e;/均方誤差double in_rate;/歸一化比例系數(shù)/用于確定隱藏層的神經(jīng)細胞數(shù)public int computeHideNum(int m,int n)double s=Math.Sqrt(0.43*m*n+0.12*n*n+2.54*m+0.77*n+0.35)+0.51;int ss=Convert.ToInt32(s);return (s-(double)ss)
4、0.5) ? ss+1:ss;public BpNet(double , p,double , t)/ 構造函數(shù)邏輯R=new Random();this.inNum=p.GetLength(1);this.outNum=t.GetLength(1);this.hideNum=computeHideNum(inNum,outNum);/this.hideNum=18;this.sampleNum=p.GetLength(0);Console.WriteLine(輸入節(jié)點數(shù)目: +inNum);Console.WriteLine(隱層節(jié)點數(shù)目:+hideNum);Console.WriteLin
5、e(輸出層節(jié)點數(shù)目:+outNum);Console.ReadLine();/將這些矩陣規(guī)定好矩陣大小x=new doubleinNum;x1=new doublehideNum;x2=new doubleoutNum;o1=new doublehideNum;o2=new doubleoutNum;w = new doubleinNum, hideNum;/權值矩陣w,這是輸入層與隱藏層之間的權值矩陣v=new doublehideNum,outNum;dw=new doubleinNum,hideNum;dv=new doublehideNum,outNum;/閾值b1=new doubl
6、ehideNum;b2=new doubleoutNum;db1=new doublehideNum;db2=new doubleoutNum;/誤差pp = new doublehideNum;/隱藏層的誤差qq = new doubleoutNum;/輸出層的誤差yd = new doubleoutNum;/輸出層的教師數(shù)據(jù)/初始化wfor(int i=0;iinNum;i+)for(int j=0;jhideNum;j+)/NextDouble返回一個介于 0.0 和 1.0 之間的隨機數(shù)。wi,j=(R.NextDouble()*2-1.0)/2;/初始化vfor(int i=0;ih
7、ideNum;i+)for(int j=0;joutNum;j+)vi,j=(R.NextDouble()*2-1.0)/2;rate=0.8;e=0.0;in_rate=1.0;/訓練函數(shù)public void train(double , p,double , t)e=0.0;/求p,t中的最大值double pMax=0.0;/sampleNum為樣本總數(shù)for(int isamp=0;isampsampleNum;isamp+)/inNum是輸入層的節(jié)點數(shù)(即神經(jīng)細胞數(shù))for(int i=0;ipMax)pMax=Math.Abs(pisamp,i);for(int j=0;jpMa
8、x)pMax=Math.Abs(tisamp,j);in_rate=pMax;/end isampfor(int isamp=0;isampsampleNum;isamp+)/數(shù)據(jù)歸一化for(int i=0;iinNum;i+)xi=pisamp,i/in_rate;for(int i=0;ioutNum;i+)ydi=tisamp,i/in_rate;/計算隱層的輸入和輸出for(int j=0;jhideNum;j+)o1j=0.0;for(int i=0;iinNum;i+)o1j+=wi,j*xi;/“權值”*“輸入”的那個累加的過程/這個b1j就是隱藏層的閾值,閾值就是一個輸入為“
9、-1”的累加值x1j=1.0/(1.0+Math.Exp(-o1j-b1j);/計算輸出層的輸入和輸出for(int k=0;koutNum;k+)o2k=0.0;for(int j=0;jhideNum;j+)o2k+=vj,k*x1j;x2k=1.0/(1.0+Math.Exp(-o2k-b2k);/計算輸出層誤差和均方差for(int k=0;koutNum;k+)/ydk是輸出層的教師數(shù)據(jù),所謂教師數(shù)據(jù)就是實際應該輸出的數(shù)據(jù)而已qqk=(ydk-x2k)*x2k*(1.0-x2k);e+=(ydk-x2k)*(ydk-x2k);/更新V,V矩陣是隱藏層與輸出層之間的權值for(int
10、j=0;jhideNum;j+)vj,k+=rate*qqk*x1j;/計算隱層誤差for(int j=0;jhideNum;j+)/PP矩陣是隱藏層的誤差ppj=0.0;/算法參考我的視頻截圖for(int k=0;koutNum;k+)ppj+=qqk*vj,k;ppj=ppj*x1j*(1-x1j);/更新Wfor(int i=0;iinNum;i+)wi,j+=rate*ppj*xi;/更新b2,輸出層的閾值for(int k=0;koutNum;k+)b2k+=rate*qqk;/更新b1,隱藏層的閾值for(int j=0;jhideNum;j+)b1j+=rate*ppj;/en
11、d isampe=Math.Sqrt(e);/均方差/ adjustWV(w,dw);/ adjustWV(v,dv);/end trainpublic void adjustWV(double , w,double, dw)for(int i=0;iw.GetLength(0);i+)for(int j=0;jw.GetLength(1);j+)wi,j+=dwi,j;public void adjustWV(double w,double dw)for(int i=0;iw.Length;i+)wi+=dwi;/數(shù)據(jù)仿真函數(shù)public double sim(double psim)for
12、(int i=0;iinNum;i+)xi= psimi/in_rate;/in_rate為歸一化系數(shù)for(int j=0;jhideNum;j+)o1j=0.0;for(int i=0;iinNum;i+)o1j=o1j+wi,j*xi;x1j=1.0/(1.0+Math.Exp(-o1j-b1j);for(int k=0;koutNum;k+)o2k=0.0;for(int j=0;jhideNum;j+)o2k=o2k+vj,k*x1j;x2k=1.0/(1.0+Math.Exp(-o2k-b2k);x2k=in_rate*x2k;return x2; /end sim/保存矩陣w,v
13、public void saveMatrix(double , w,string filename)StreamWriter sw=File.CreateText(filename);for(int i=0;iw.GetLength(0);i+)for(int j=0;jw.GetLength(1);j+)sw.Write(wi,j+ );sw.WriteLine();sw.Close();/保存矩陣b1,b2public void saveMatrix(double b,string filename)StreamWriter sw=File.CreateText(filename);for
14、(int i=0;ib.Length;i+)sw.Write(bi+ );sw.Close();/讀取矩陣W,Vpublic void readMatrixW(double , w,string filename)StreamReader sr;trysr = new StreamReader(filename,Encoding.GetEncoding(gb2312);String line;int i=0;while (line = sr.ReadLine() != null)string s1=line.Trim().Split( );for(int j=0;js1.Length;j+)w
15、i,j=Convert.ToDouble(s1j);i+;sr.Close();catch (Exception e)/ Let the user know what went wrong.Console.WriteLine(The file could not be read:);Console.WriteLine(e.Message);/讀取矩陣b1,b2public void readMatrixB(double b,string filename)StreamReader sr;trysr = new StreamReader(filename,Encoding.GetEncoding
16、(gb2312);String line;int i=0;while (line = sr.ReadLine() != null)bi=Convert.ToDouble(line);i+;sr.Close();catch (Exception e)/ Let the user know what went wrong.Console.WriteLine(The file could not be read:);Console.WriteLine(e.Message);/end bpnet /end namespace/主調用程序namespace BpANNet/ / Class1 的摘要說明
17、。/ class Class1/ / 應用程序的主入口點。/ STAThreadstatic void Main(string args)/0.1399,0.1467,0.1567,0.1595,0.1588,0.1622,0.1611,0.1615,0.1685,0.1789,0.1790/ double , p1=new double,0.05,0.02,0.09,0.11,0.12,0.20,0.15,0.22,0.20,0.25,0.75,0.75,0.80,0.83,0.82,0.80,0.90,0.89,0.95,0.89,0.09,0.04,0.1,0.1,0.14,0.21,0
18、.18,0.24,0.22,0.28,0.77,0.78,0.79,0.81,0.84,0.82,0.94,0.93,0.98,0.99;/ double , t1=new double,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1;/p1是輸入的信息,一共5組,輸入層為六個節(jié)點,p156double , p1=new double,0.1399,0.1467,0.1567,0.1595,0.1588,0.1622,0.1467,0.1567,0.1595,0.1588,0.162
19、2,0.1611,0.1567,0.1595,0.1588,0.1622,0.1611,0.1615,0.1595,0.1588,0.1622,0.1611,0.1615,0.1685,0.1588,0.1622,0.1611,0.1615,0.1685,0.1789;/t1是輸出信息,一共6組,t161double , t1=new double,0.1622,0.1611,0.1615,0.1685,0.1789,0.1790;BpNet bp=new BpNet(p1,t1);int study=0;dostudy+;bp.train(p1,t1);/ bp.rate=0.95-(0.95-0.3)*study/50000;/ Console.Write(第 + study+次學習: );/ Console.WriteLine( 均方差為 +bp.e);while(bp.e0.001 & study 50000);Console.Write(第 + study+次學習: );Console.WriteLine( 均方差為 +bp.e);bp.saveMatrix(bp.w,w
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 法院安檢人員管理制度匯編(3篇)
- 客戶露營活動策劃方案(3篇)
- 甘肅泵房施工方案(3篇)
- 景區(qū)票務系統(tǒng)管理制度
- 罕見自身免疫病的免疫耐受誘導策略
- 2026廣東佛山榮山中學面向社會招聘臨聘教師4人備考題庫及答案詳解(考點梳理)
- 2026云南玉溪市峨山縣教育體育系統(tǒng)招聘畢業(yè)生6人備考題庫及參考答案詳解
- 2026江西贛州市人力資源有限公司招聘勞務派遣制工作人員1人備考題庫含答案詳解
- 罕見腫瘤的個體化治療特殊人群治療考量因素
- 新公司會計財務制度
- 2026簡易標準版離婚協(xié)議書
- 2026廣東東莞市謝崗鎮(zhèn)社區(qū)衛(wèi)生服務中心招聘納入崗位管理編制外人員7人備考題庫及一套答案詳解
- 湖南省長沙市天心區(qū)長郡中學2026屆高一生物第一學期期末統(tǒng)考試題含解析
- 2025年csco肝癌治療指南
- 2026云南公務員考試(6146人)易考易錯模擬試題(共500題)試卷后附參考答案
- 2025年直招軍官筆試題型及答案
- 倉儲安全檢查標準及執(zhí)行流程
- 惡劣天氣應急處理演練方案
- 骨質疏松護理要點解讀
- 2025年抖音直播年度生態(tài)報告
- 班級管理三位老師
評論
0/150
提交評論