




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
下面是BPNET.CPP源文件#=BpNet.cpp : implementation file=/人工神經(jīng)網(wǎng)絡(luò)BP算法/1、動態(tài)改變學習速率/2、加入動量項/3、運用了Matcom4.5的矩陣運算庫(可免費下載,頭文件matlib.h),/ 方便矩陣運算,當然,也可自己寫矩陣類/4、可暫停運算/5、可將網(wǎng)絡(luò)以文件的形式保存、恢復/作者:同濟大學材料學院 張純禹/email:chunyu_79/QQ:53806186/歡迎不斷改進!歡迎討論其他實用的算法!/#include BpNet.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBpNetIMPLEMENT_SERIAL( CBpNet, CObject, 1 )CBpNet:CBpNet()initM(MATCOM_VERSION);/啟用矩陣運算庫CBpNet:CBpNet()exitM();delete this;/ CBpNet message handlers/創(chuàng)建新網(wǎng)絡(luò)void CBpNet:Create(Mm mInputData, Mm mTarget, int iInput, int iHidden, int iOutput) int i,j;mSampleInput=zeros(mInput.rows(),mInput.cols();mSampleTarget=zeros(mTarget.rows(),mTarget.cols();mSampleInput=mInputData;mSampleTarget=mTarget;this-iInput=iInput;this-iHidden=iHidden;this-iOutput=iOutput;/創(chuàng)建計算用的單個樣本矩陣mInput=zeros(1,this-iInput);mHidden=zeros(1,this-iHidden);mOutput=zeros(1,this-iOutput);/創(chuàng)建權(quán)重矩陣,并賦初值mWeighti=zeros(this-iInput,this-iHidden);mWeighto=zeros(this-iHidden,this-iOutput); /賦初值for(i=1;iiInput;i+) for(j=1;jiHidden;j+) mWeighti.r(i,j)=randab(-1.0,1.0);for(i=1;iiHidden;i+) for(j=1;jiOutput;j+) mWeighto.r(i,j)=randab(-1.0,1.0);/創(chuàng)建闕值矩陣,并賦值mThresholdi=zeros(1,this-iHidden);for(i=1;iiHidden;i+) mThresholdi.r(i)=randab(-1.0,1.0);mThresholdo=zeros(1,this-iOutput);for(i=1;iiOutput;i+) mThresholdo.r(i)=randab(-1.0,1.0);/創(chuàng)建權(quán)重變化矩陣mChangei=zeros(this-iInput,this-iHidden);mChangeo=zeros(this-iHidden,this-iOutput);mInputNormFactor=zeros(iInput,2);mTargetNormFactor=zeros(iOutput,2);/誤差矩陣 mOutputDeltas=zeros(iOutput); mHiddenDeltas=zeros(iHidden);/學習速率賦值dblLearnRate1=0.5;dblLearnRate2=0.5;dblMomentumFactor=0.95;m_isOK=false;m_IsStop=false;dblMse=1.0e-6;/誤差限dblError=1.0;lEpochs=0;/根據(jù)已有的網(wǎng)絡(luò)進行預測Mm CBpNet:simulate(Mm mData)int i,j;Mm mResult;Mm data=zeros(mData.rows(),mData.cols();data=mData;if(mData.cols()!=iInput):MessageBox(NULL,輸入數(shù)據(jù)變量個數(shù)錯誤!,輸入數(shù)據(jù)變量個數(shù)錯誤!,MB_OK);return mResult;mResult=zeros(data.rows(),iOutput); /正規(guī)化數(shù)據(jù)for(i=1;i=data.rows();i+) for(j=1;j=data.cols();j+) data.r(i,j)=(data.r(i,j)-mInputNormFactor.r(j,1)/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1);/計算 int iSample; Mm mInputdata,mHiddendata,mOutputdata; mInputdata=zeros(1,iInput); mHiddendata=zeros(1,iHidden); mOutputdata=zeros(1,iOutput); double sum=0.0; for(iSample=1;iSample=data.rows();iSample+) /輸入層數(shù)據(jù) for(i=1;i=iInput;i+) mInputdata.r(i)=data.r(iSample,i); /隱層數(shù)據(jù) for(j=1;j=iHidden;j+) sum=0.0; for(i=1;i=iInput;i+) sum+=mInputdata.r(i)*mWeighti.r(i,j); sum-=mThresholdi.r(j); mHiddendata.r(j)=1.0/(1.0+exp(-sum); /輸出數(shù)據(jù) for(j=1;j=iOutput;j+) sum=0.0; for(i=1;i=iHidden;i+) sum+=mHiddendata.r(i)*mWeighto.r(i,j); sum-=mThresholdo.r(j); mOutputdata.r(j)=1.0/(1.0+exp(-sum); /轉(zhuǎn)換 for(j=1;jdblMse&!m_IsStop) dblTotal=0.0; for(iSample=1;iSample1.04)/動態(tài)改變學習速率 dblLearnRate1*=0.7; dblLearnRate2*=0.7; else dblLearnRate1*=1.05; dblLearnRate2*=1.05; lEpochs+; dblError=dblTotal; :PeekMessage(&msg,NULL,0,0,PM_REMOVE); :DispatchMessage(&msg); msg.message=-1; :DispatchMessage(&msg);/這樣可以消除屏閃和假死機if(dblError=dblMse)m_isOK=true;elsem_isOK=false;void CBpNet:stop()m_IsStop=true;double CBpNet:randab(double a, double b) /注意,如果應(yīng)用矩陣庫,頭文件matlib.h對rand()函數(shù)重新定義,只產(chǎn)生(0,1)/之間的隨機數(shù)return(b-a)*rand()+a);/將數(shù)據(jù)轉(zhuǎn)化到(0,1)區(qū)間void CBpNet:normalize()int i,j;/輸入數(shù)據(jù)范圍mInputNormFactor=scope(mSampleInput);/目標數(shù)據(jù)范圍mTargetNormFactor=scope(mSampleTarget);for(i=1;i=mSampleInput.rows();i+) for(j=1;j=mSampleInput.cols();j+) mSampleInput.r(i,j)=(mSampleInput.r(i,j)-mInputNormFactor.r(j,1)/(mInputNormFactor.r(j,2)-mInputNormFactor.r(j,1);for(i=1;i=mSampleTarget.rows();i+) for(j=1;j=mSampleTarget.cols();j+) mSampleTarget.r(i,j)=(mSampleTarget.r(i,j)-mTargetNormFactor.r(j,1)/(mTargetNormFactor.r(j,2)-mTargetNormFactor.r(j,1);/前向計算 void CBpNet:forward(int iSample)/根據(jù)第iSample個樣本,前向計算 if(iSamplemSampleInput.rows() MessageBox(NULL,無此樣本數(shù)據(jù):索引出界!,無此樣本數(shù)據(jù):索引出界!,MB_OK); return; int i,j; double sum=0.0; /輸入層數(shù)據(jù) for(i=1;i=iInput;i+) mInput.r(i)=mSampleInput.r(iSample,i); /隱層數(shù)據(jù) for(j=1;j=iHidden;j+) sum=0.0; for(i=1;i=iInput;i+) sum+=mInput.r(i)*mWeighti.r(i,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公司合伙人管理制度
- 安保聯(lián)防方案模板(3篇)
- 渠道方案設(shè)計模板(3篇)
- DB62T 4333-2021 綠色食品 隴東地區(qū)苦瓜露地生產(chǎn)技術(shù)規(guī)程
- 美術(shù)展廳改造方案(3篇)
- 中式食堂裝修方案(3篇)
- 租房合同售后服務(wù)協(xié)議書
- 部隊衛(wèi)生員試題及答案
- 電廠改造檢修方案(3篇)
- 商戶撤場退鋪驗收單
- 手工皂制作教程(課堂)課件
- 部編版小學道德與法治三年級下冊期末質(zhì)量檢測試卷【含答案】5套
- 斷親協(xié)議書范本
- 五年級語文下冊第八單元【教材解讀】課件
- 手衛(wèi)生依從性差魚骨分析
- 外科圍手術(shù)期患者心理問題原因分析及護理干預
- 電荷耦合器件(CCD)介紹和工作原理
- JJF(閩) 1101-2020 在線式CCD圖像尺寸測量系統(tǒng)校準規(guī)范
- 生產(chǎn)安全事故調(diào)查工作實務(wù)含直接經(jīng)濟損失計算方法和標準
- 四川省甘孜州2022年中考語文試題及參考答案
評論
0/150
提交評論