bp神經網路總結 附鏈結 都能執行

2021-09-24 21:51:45 字數 4067 閱讀 3536

% 

% %讀取訓練資料

[f1,f2,f3,f4,class] = textread('f:\matlabcode\bp神經網路例子\iris資料集\traindata.txt' , '%f%f%f%f%f',150);

%特徵值歸一化 %這裡的每列是乙個屬性/特徵的所有輸入值,並不是後面函式中輸入的一組樣本資料。

[input,mini,maxi] = premnmx( [f1 , f2 , f3 , f4 ]') ;

%構造輸出矩陣

s = length( class) ;

output = zeros( s , 3 ) ;

for i = 1 : s

output( i , class( i ) ) = 1 ;

end%建立神經網路

net = newff( minmax(input) , [10 3] , , 'traingdx' ) ;

%設定訓練引數

net.trainparam.show = 50 ;

net.trainparam.epochs = 500 ;

net.trainparam.goal = 0.01 ;

net.trainparam.lr = 0.01 ;

%開始訓練

net = train( net, input , output' ) ;

%讀取測試資料

[t1 t2 t3 t4 c] = textread('f:\matlabcode\bp神經網路例子\iris資料集\testdata.txt' , '%f%f%f%f%f',150);

%測試資料歸一化

testinput = tramnmx ( [t1,t2,t3,t4]' , mini, maxi ) ;

%**y = sim( net , testinput )

%統計識別正確率

[s1 , s2] = size( y ) ;

hitnum = 0 ;

for i = 1 : s2

[m , index] = max( y( : , i ) ) ;

if( index == c(i) )

hitnum = hitnum + 1 ;

endend

sprintf('識別率是 %3.3f%%',100 * hitnum / s2 )

第二個

% 

clear all

p = [-1 -1 2 2; 0 5 0 5];

t = [-1 -1 2 2];

%% 新式語法

net2 = newff(p,t,5,, 'traingd'); % 隱含層有5個神經元

%p是輸入的資料樣本 t是隱層到輸出層的各自節點數

net2.trainparam.goal = 1e-5;

net2.trainparam.epochs = 300;

net2.trainparam.lr = 0.05;

net2.trainparam.showwindow = 1;

net2.dividefcn = ''; % 為和書本一致,對於樣本極少的情況,不要再三分了

% newff.m分成三大塊:主程式、新版實現子函式 new_5p1()、舊版實現子函式 new_5p0()。通過仔細比較新舊這兩個子函式,發現新版設定了 net.dividefcn 屬性,

% 其值為'dividerand'。該函式把樣本資料三分為訓練集、驗證集和測試集,預設比例是6:2:2。於是在我的程式中清除該屬性再訓練:

net2 = train(net2,p,t);

y2 = sim(net2,p);

disp(['新式語法 mse: ' num2str(mse(t-y2))]);

第三個

% 

% 部落格位址

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,'*'); %繪製原始資料分布圖

net = newff([-1 1],[10 1],);

net.trainparam.epochs = 500; %訓練的最大次數

net.trainparam.goal = 0.005; %全域性最小誤差

net = train(net,x,d);

o = sim(net,x);

figure;

plot(x,d,'*',x,o); %繪製訓練後得到的結果和誤差曲線

v = net.iw%輸入層到中間層權值

theta1 = net.b%中間層各神經元閾值

w = net.lw%中間層到輸出層權值

theta2 = net.b%輸出層各神經元閾值

% 神經網路學習主要函式說明

% newff:前饋網路建立函式

% 語法:

% net = newff(a,b,,』trainfun』,』blf』,』pf』)。

% a:乙個n*2的矩陣,第i行元素為輸入訊號xi的最大最小值

% b:乙個k維行向量,其元素為網路中各個節點的數量。

% c:乙個k維字串行向量,每乙個分量為對應層的神經元的啟用函式,預設為「tansig」

% trainfun:為學習規則的採用的訓練演算法。預設為:「trainlm」

% blf:bp權值/偏差學習函式。預設為:「learngdm」

% pf:效能函式,預設為「mse」

% % train函式

% 語法:

% 即網路學習函式:

% [net,tr,yi,e] = train(net,x,y)

% x:網路實際輸入

% y:網路應有輸出

% tr:網路跟蹤資訊

% yi:網路實際輸出

% e:誤差矩陣

% % sim函式

% **語法:**y = sim(net,x)

% x:輸入給網路的k*n矩陣,k為網路輸入個數,n為樣本資料量

% y:輸出矩陣q*n,其中q為網路輸出個數

第四個

% 

% 部落格位址

% bp網路函式逼近例項

% 1.首先定義正弦函式,取樣率為20hz,頻率為1hz

k = 1; % 設定正弦訊號頻率

p = [0:0.05:4];

t = cos(k*pi*p) + 2*sin(pi*p);

plot(p, t, '-')

xlabel('時間')

ylabel('輸入訊號')

% 2.生成bp網路。用newff函式生成前向型bp網路,設定隱層中神經元數目為10

% 分別選擇隱層的傳遞函式為 tansig,輸出層的傳遞函式為 purelin,

% 學習演算法為trainlm表示網路的訓練函式。

net =newff(minmax(p),[10,10,1],,'trainlm');

% 3.對生成的網路進行**並做圖顯示。 sim是**函式

y1 = sim(net,p); plot(p, t, '-', p, y1, '--')

% 4.訓練。對網路進行訓練,設定訓練誤差目標為 1e-5,最大迭代次數為300,

% 學習速率為0.05。

net.trainparam.lr=0.05;

net.trainparam.epochs=300;

net.trainparam.goal=1e-5;

[net,tr]=train(net,p,t);

%5.再次對生成的網路進行**並做圖顯示。

y2 = sim(net,p);

plot(p, t, '-', p, y2, '--')

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...

BP神經網路

bp是back propagation bp神經網路主要的演算法在於誤差反向傳播error backpropagation 有三層 輸入層 input 隱含層 hidden 輸出層 output 輸入層 n個神經元 隱含層 p個神經元 輸出層 q個神經元 輸入向量 x x1,x2,x n 隱含層輸入...