BP神經網路matlab簡單實現

BP神經網路matlab簡單實現

1、結構原理

BP(BackPropagation)神經網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出模式映射關係,而無需事前揭示描述這種映射關係的數學方程。它的學習規則是使用最速下降法,通過反向傳播來不斷調整網路的權值和閾值,使網路的誤差平方和最小。BP神經網路模型拓撲結構包括輸入層(input)、隱層(hiddenlayer)和輸出層(outputlayer)。

單個神經元結構

2、計算迭代過程

BP神經網路的計算過程由正向計算過程和反向計算過程組成。正向傳播過程,輸入模式從輸入層經隱單元層逐層處理,並轉向輸出層,每~層神經元的狀態隻影響下一層神經元的狀態。如果在輸出層不能得到期望的輸出,則轉入反向傳播,將誤差信號沿原來的連接通路返回,通過修改各神經元的權值,使得誤差信號最小。

3、利用matlab提供的工具箱創建一個BP神經網路

%%clearclc%%%添加數據集 load concrete_data %% 劃分數據集 temp = randperm(size(attributes,2)); P_train = attributes(: , temp(1:80) ); T_train = strength(: , temp(1:80) ); P_test = attributes(: , temp(81:end) ); T_test = strength(: , temp(81:end) ); %% 數據歸一化 [p_train , ps_train ] = mymapminmax(P_train,0,1); p_test = mapminmax(apply,P_test,ps_train); [ t_train , ps_output ] = mymapminmax(T_train , 0,1);%% 開始構建BP網路net = newff(p_train,t_train,9); %隱含層為9個神經元%設定參數網路參數net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;net.trainParam.lr = 0.01;%% 開始訓練net = train(net,p_train,t_train);%% 測試網路t_sim = sim(net,p_test);%反歸一化T_sim = mapminmax(reverse,t_sim,ps_output);R2 = corrcoef(T_sim,T_test);R2 = R2(1,2)^ 2;%% 畫出誤差圖figureplot( 1:23 , T_test, -or ,1:23 , T_sim , -*b);legend(真實值,預測值)xlabel(預測樣本)ylabel(strength)string = {BP網路預測結果對比;[R^2= num2str(R2)]};title(string)


數據+源代碼 github.com/Mschenl/matl

原理參見 galaxy.agh.edu.pl/~vlsi

推薦閱讀:

TAG:神經網路 | MATLAB | MATLAB模式識別 |