改進(jìn)后的bp算法_第1頁
改進(jìn)后的bp算法_第2頁
改進(jìn)后的bp算法_第3頁
改進(jìn)后的bp算法_第4頁
改進(jìn)后的bp算法_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、#include "iostream.h"#include "iomanip.h"#include "stdlib.h"#include "math.h"#include "stdio.h"#include "time.h"#include "fstream.h"#define N 2 /學(xué)習(xí)樣本個(gè)數(shù)#define IN 3 /輸入層神經(jīng)元數(shù)目#define HN 3 /隱層神經(jīng)元數(shù)目#define ON 2 /輸出層神經(jīng)元數(shù)目#define Z 2000

2、00 /舊權(quán)值保存-每次study的權(quán)值都保存下來double PIN; /單個(gè)樣本輸入數(shù)據(jù)double TON; /單個(gè)樣本教師數(shù)據(jù)double WHNIN; /輸入層至隱層權(quán)值double VONHN; /隱層至輸出層權(quán)值double XHN; /隱層的輸入double YON; /輸出層的輸入double HHN; /隱層的輸出double OON; /輸出層的輸出double YU_HNHN; /隱層的閾值double YU_ONON; /輸出層的閾值double err_mN; /第m個(gè)樣本的總誤差double a; /輸出層至隱層的學(xué)習(xí)效率double b; /隱層至輸入層學(xué)習(xí)效率

3、double alpha; /動(dòng)量因子,改進(jìn)型bp算法使用/定義一個(gè)放學(xué)習(xí)樣本的結(jié)構(gòu)struct double inputIN; /輸入在上面定義是一個(gè)double teachON; /輸出在上面定義也是一個(gè)Study_DataN;/學(xué)習(xí)樣本/改進(jìn)型bp算法用來保存每次計(jì)算的權(quán)值struct double old_WHNIN; /保存HN-IN舊權(quán)!double old_VONHN; /保存ON-HN舊權(quán)!Old_WVZ; saveWV(int m)for(int i=0;i<HN;i+)for(int j=0;j<IN;j+)Old_WVm.old_Wij = Wij;for(i

4、nt ii=0;ii<ON;ii+)for(int jj=0;jj<HN;jj+)Old_WVm.old_Viijj = Viijj;return 1;/初始化權(quán)、閾值子程序/initial()/隱層權(quán)、閾值初始化/srand( (unsigned)time( NULL ) );for(int i=0;i<HN;i+)for(int j=0;j<IN;j+)Wij= (double)(rand()/32767.0)*2-1); /初始化輸入層到隱層的權(quán)值,隨機(jī)模擬0 和 1 -1for(int ii=0;ii<ON;ii+)for(int jj=0;jj<H

5、N;jj+)Viijj= (double)(rand()/32767.0)*2-1); /初始化隱層到輸出層的權(quán)值,隨機(jī)模擬0 和 1 -1for(int k=0;k<HN;k+)YU_HNk = (double)(rand()/32767.0)*2-1); /隱層閾值初始化 ,-0.01 0.01 之間for(int kk=0;kk<ON;kk+)YU_ONkk = (double)(rand()/32767.0)*2-1); /輸出層閾值初始化 ,-0.01 0.01 之間 return 1;/子程序initial()結(jié)束/第m個(gè)學(xué)習(xí)樣本輸入子程序/input_P(int m)

6、for (int i=0;i<IN;i+) Pi=Study_Datam.inputi;/獲得第m個(gè)樣本的數(shù)據(jù)return 1;/子程序input_P(m)結(jié)束/第m個(gè)樣本教師信號(hào)子程序/input_T(int m)for (int k=0;k<m;k+) Tk=Study_Datam.teachk;return 1;/子程序input_T(m)結(jié)束/隱層各單元輸入、輸出值子程序/H_I_O()double sigma;int i,j;for (j=0;j<HN;j+)sigma=0.0;for (i=0;i<IN;i+)sigma+=Wji*Pi;/求隱層內(nèi)積Xj=s

7、igma - YU_HNi;/求隱層凈輸入,為什么減隱層的閥值Hj=1.0/(1.0+exp(-Xj);/求隱層輸出 siglon算法return 1;/子程序H_I_O()結(jié)束/輸出層各單元輸入、輸出值子程序/O_I_O()double sigma;for (int k=0;k<ON;k+) sigma=0.0; for (int j=0;j<HN;j+) sigma+=Vkj*Hk;/求輸出層內(nèi)積Yk=sigma-YU_ONk; /求輸出層凈輸入Ok=1.0/(1.0+exp(-Yk);/求輸出層輸出return 1;/子程序O_I_O()結(jié)束/輸出層至隱層的一般化誤差子程序/

8、double d_errON;Err_O_H(int m)double abs_errON;/每個(gè)樣本的絕對(duì)誤差都是從0開始的double sqr_err=0;/每個(gè)樣本的平方誤差計(jì)算都是從0開始的for (int k=0;k<ON;k+) abs_errk=Tk-Ok;/求第m個(gè)樣本下的第k個(gè)神經(jīng)元的絕對(duì)誤差sqr_err+=(abs_errk)*(abs_errk);/求第m個(gè)樣本下輸出層的平方誤差d_errk=abs_errk*Ok*(1.0-Ok);/d_errk輸出層各神經(jīng)元的一般化誤差err_mm=sqr_err/2;/第m個(gè)樣本下輸出層的平方誤差/2=第m個(gè)樣本的均方誤差r

9、eturn 1;/子程序Err_O_H(m)結(jié)束/隱層至輸入層的一般化誤差子程序/double e_errHN;Err_H_I()double sigma;for (int j=0;j<HN;j+) sigma=0.0; for (int k=0;k<ON;k+) sigma=d_errk*Vkj;e_errj=sigma*Hj*(1-Hj);/隱層各神經(jīng)元的一般化誤差return 1;/子程序Err_H_I()結(jié)束/輸出層至隱層的權(quán)值調(diào)整、輸出層閾值調(diào)整計(jì)算子程序/Delta_O_H(int m,int n)if(n<=1)for (int k=0;k<ON;k+)f

10、or (int j=0;j<HN;j+)Vkj=Vkj+a*d_errk*Hj;/輸出層至隱層的權(quán)值調(diào)整YU_ONk+=a*d_errk;/輸出層至隱層的閾值調(diào)整else if(n>1)for (int k=0;k<ON;k+)for (int j=0;j<HN;j+)Vkj=Vkj+a*d_errk*Hj+alpha*(Vkj-Old_WV(n-1).old_Vkj);/輸出層至隱層的權(quán)值調(diào)整YU_ONk+=a*d_errk;/輸出層至隱層的閾值調(diào)整return 1;/子程序Delta_O_H()結(jié)束/隱層至輸入層的權(quán)值調(diào)整、隱層閾值調(diào)整計(jì)算子程序/Delta_H_I

11、(int m,int n)if(n<=1)for (int j=0;j<HN;j+)for (int i=0;i<IN;i+) Wji=Wji+b*e_errj*Pi;/隱層至輸入層的權(quán)值調(diào)整YU_HNj+=b*e_errj;else if(n>1)for (int j=0;j<HN;j+)for (int i=0;i<IN;i+) Wji=Wji+b*e_errj*Pi+alpha*(Wji-Old_WV(n-1).old_Wji);/隱層至輸入層的權(quán)值調(diào)整YU_HNj+=b*e_errj;return 1;/子程序Delta_H_I()結(jié)束/N個(gè)樣本的全

12、局誤差計(jì)算子程序/double Err_Sum()double total_err=0;for (int m=0;m<N;m+) total_err+=err_mm;/每個(gè)樣本的均方誤差加起來就成了全局誤差return total_err;/子程序Err_sum()結(jié)束GetTrainingData()ifstream GetTrainingData ( "訓(xùn)練樣本.txt", ios:in );for(int m=0;m<N;m+)for(int i=0;i<IN;i+)GetTrainingData>>Study_Datam.inputi;

13、 /取得輸入數(shù)據(jù)for(int j=0;j<ON;j+)GetTrainingData>>Study_Datam.teachj; /取得輸出數(shù)據(jù)GetTrainingData.close();return 1;void savequan()ofstream outQuanFile( "權(quán)值.txt", ios:out );ofstream outYuFile( "閾值.txt", ios:out );outQuanFile<<"An"for(int i=0;i<HN;i+)for(int j=0;j

14、<IN;j+)outQuanFile<<Wij<<" "outQuanFile<<"n"outQuanFile<<"Bn"for(int ii=0;ii<ON;ii+)for(int jj=0;jj<HN;jj+)outQuanFile<<Viijj<<" "outQuanFile<<"n"outYuFile<<"輸出層的閾值為:n"for(int k=0;k&l

15、t;ON;k+)outYuFile<<YU_ONk<<" " /輸出層閾值寫入文本outYuFile<<"n隱層的閾值為:n"for(int kk=0;kk<HN;kk+)outYuFile<<YU_HNkk<<" " /隱層閾值寫入文本outQuanFile.close();/*/*程序入口,即主程序*/*/void main()double sum_err;int study;/訓(xùn)練次數(shù)a = 0.7;b = 0.7;alpha = 0.9; /動(dòng)量因子study=

16、0; /學(xué)習(xí)次數(shù)double Pre_error ; /預(yù)定誤差Pre_error = 0.0001;int Pre_times;Pre_times = 200;GetTrainingData();initial(); /隱層、輸出層權(quán)、閾值初始化 (1) do+study; for (int m=0;m<N;m+) input_P(m); /輸入第m個(gè)學(xué)習(xí)樣本 (2)input_T(m);/輸入第m個(gè)樣本的教師信號(hào) (3)H_I_O(); /第m個(gè)學(xué)習(xí)樣本隱層各單元輸入、輸出值 (4)O_I_O(); /第m個(gè)學(xué)習(xí)樣本輸出層各單元輸入、輸出值 (5)Err_O_H(m); /第m個(gè)學(xué)習(xí)樣本輸出層至隱層一般化誤差 (6) Err_H_I(); /第m個(gè)學(xué)習(xí)樣本隱層至輸入層一般化誤差 (7)Delta_O_H(m,study); /第m個(gè)學(xué)習(xí)樣本輸出層至隱層權(quán)閾值調(diào)整、修改 (8)Delta_H_I(m,study); /第m個(gè)學(xué)習(xí)樣本隱層至輸入層權(quán)閾值調(diào)整、修改 (9) /全部樣本訓(xùn)練完畢sum_err=Err_Sum(); /全部樣本全局誤差計(jì)算 (10)saveWV(s

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論