1、BP神經網絡是一種前饋型網絡(各神經元接受前一層的輸入,並輸出給下一層,沒有反饋),分為input層,hide層,output層
2、BP神經網絡的步驟:
1)創建一個神經網絡:newff
a.訓練樣本:歸一化(premnmx ,postmnmx ,tramnmx)
b.確定節點數:輸出層的節點數可直接獲得
c.確定各層神經元的激活函數
常見的激活函數:purelin:線性/logsig:對數S型/tansig:正切S型
d.確定訓練函數
traingd :梯度下降BP訓練函數/traingdx :梯度下降自適應學習率訓練函數
%Format:net = newff ( A, B, {C} ,‘trainFun’)
A:n×2的矩陣,第i行元素為輸入信號xi的最小值和最大值
B:k維行向量,其元素為網絡中各層節點數
C:k維字符串行向量,每一分量為對應層神經元的激活函數
trainFun :為學習規則采用的訓練算法
2)學習:train
學習是一個調整權重的過程,使得通過神經網絡的輸出不斷逼近應有的輸出
網絡配置參數
net.trainparam.goal:神經網絡訓練的目標誤差
net.trainparam.show:顯示中間結果的周期
net.trainparam.epochs:最大迭代次數
net.trainParam.lr:學習率
%Farmat:net=train( net, X, Y )
X:網絡實際輸入
Y:網絡應有輸出
3)仿真模擬
選擇測試集X進行模擬
%Farmat:Y=sim(net,X)
3、舉例
下面將舉大量的例子來說明BP神經網絡的應用。
1)對函數f(x)=sinx(0=<x<=pi/2)進行逼近
1 %%%使用BP神經網絡逼近函數cos(x)%%% 2 clc;clear; 3 x=0:0.1:1.5;%訓練樣本 4 y=sin(x);%真實的輸出值 5 net=newff(minmax(x),[10,1],{'logsig','logsig'});%建立bp神經網絡 6 net.trainParam.show = 50; 7 net.trainParam.lr = 0.01; 8 net.trainParam.goal = 0.0001; 9 net.trainParam.epochs = 500; 10 net=train(net,x,y);%訓練樣本 11 testx=0.01:0.1:1.51; 12 testy=sim(net,testx);%測試 13 plot(x,y,testx,testy,'r');
2)對兩種蠓蟲(Af 與Apf)進行鑒別:
依據的資料是觸角和翅膀的長度,已經測得了9 支Af 和6 支Apf 的數據如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),
(1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
Q:對觸角和翼長分別為(1.24,1.80),(1.28,1.84)與(1.40,2.04)的3 個標本加以識別。
1 clear 2 p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 3 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08]; 4 p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00 5 1.28,2.00;1.30,1.96]; 6 p=[p1;p2]'; 7 pr=minmax(p); 8 net=newff(pr,[3,2],{'logsig','logsig'}); 9 net.trainParam.show = 10; 10 net.trainParam.lr = 0.05; 11 net.trainParam.goal = 1e-10; 12 net.trainParam.epochs = 50000; 13 net = train(net,p,goal); 14 x=[1.24 1.80;1.28 1.84;1.40 2.04]'; 15 y0=sim(net,p) 16 y=sim(net,x)