BP神經網絡的matlab實現

什麼是BP神經網絡

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

BP網絡構建

這裏寫圖片描述

BP網絡的訓練函數

這裏寫圖片描述

BP網絡訓練參數

1.訓練參數 2.參數介紹 3.訓練函數
net.trainParam.epochs 最大訓練次數(缺省爲10) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.goal 訓練要求精度(缺省爲0) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.lr 學習率(缺省爲0.01) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.max_fail 最大失敗次數(缺省爲5) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.min_grad 最小梯度要求(缺省爲1e-10) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.show 顯示訓練迭代過程(NaN表示不顯示,缺省爲25) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.time 最大訓練時間(缺省爲inf) traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.mc 動量因子(缺省0.9) traingdm、traingdx
net.trainParam.lr_inc 學習率lr增長比(缺省爲1.05) traingda、traingdx
net.trainParam.lr_dec 學習率lr下降比(缺省爲0.7) traingda、traingdx
net.trainParam.max_perf_inc 表現函數增加最大比(缺省爲1.04) traingda、traingdx
net.trainParam.delt_inc 權值變化增加量(缺省爲1.2) trainrp
net.trainParam.delt_dec 權值變化減小量(缺省爲0.5) trainrp
net.trainParam.delt0 初始權值變化(缺省爲0.07) trainrp
net.trainParam.deltamax 權值變化最大值(缺省爲50.0) trainrp
net.trainParam.searchFcn 一維線性搜索方法(缺省爲srchcha) traincgf、traincgp、traincgb、trainbfg、trainoss
net.trainParam.sigma 因爲二次求導對權值調整的影響參數(缺省值5.0e-5) trainscg
net.trainParam.lambda Hessian矩陣不確定性調節參數(缺省爲5.0e-7) trainscg
net.trainParam.men_reduc 控制計算機內存/速度的參量,內存較大設爲1,否則設爲2(缺省爲1) trainlm
net.trainParam.mu 的初始值(缺省爲0.001)
trainlm
net.trainParam.mu_dec 的減小率(缺省爲0.1)
trainlm
net.trainParam.mu_inc 的增長率(缺省爲10)
trainlm
net.trainParam.mu_max 的最大值(缺省爲1e10)
trainlm

[Matlab]例1

輸入:P=[-1 -1 2 2 4;0 5 0 5 7];
輸出:T=[-1 -1 1 1 -1];

代碼

clear;
clc;
P=[-1 -1 2 2 4;0 5 0 5 7];
T=[-1 -1 1 1 -1];
%利用minmax函數求輸入樣本範圍
net = newff(minmax(P),[5,1],{'tansig','purelin'},'trainrp');

net.trainParam.show=50;  %顯示訓練迭代過程
net.trainParam.lr=0.05;  %學習率
net.trainParam.epochs=300; %最大訓練次數
net.trainParam.goal=1e-5; %訓練要求精度
[net,tr]=train(net,P,T); %網絡訓練

W1= net.iw{1, 1}  %輸入層到中間層的權值
B1 = net.b{1} %中間各層神經元閾值
W2 = net.lw{2, 1} %中間層到輸出層的權值
B2 = net.b{2} %輸出層各神經元閾值

sim(net,P) %利用得到的神經網絡仿真

matlab工具箱結果解釋

這裏寫圖片描述

[Matlab]例2

利用三層BP神經網絡來完成非線性函數的逼近任務,其中隱層神經元個數爲五個。
樣本數據:
這裏寫圖片描述

代碼

看到期望輸出的範圍是[-1, 1] ,所以利用雙極性Sigmoid函數作爲轉移函數。

clear;
clc;
X=-1:0.1:1;
D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...
    0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988...
    0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];
figure;
plot(X,D,'*'); %繪製原始數據分佈圖(附錄:1-1)
net = newff([-1 1],[5 1],{'tansig','tansig'});
net.trainParam.epochs = 100; %訓練的最大次數
net.trainParam.goal = 0.005; %全局最小誤差
net = train(net,X,D); 
O = sim(net,X); 
figure; 
plot(X,D,'*',X,O); %繪製訓練後得到的結果和誤差曲線(附錄:1-2、1-3)
V = net.iw{1,1}%輸入層到中間層權值
theta1 = net.b{1}%中間層各神經元閾值
W = net.lw{2,1}%中間層到輸出層權值
theta2 = net.b{2}%輸出層各神經元閾值

輸出圖像

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章