㈠ matlab BP神經網路出錯 newff參數 隱含層 怎麼確定
設[P,T]是訓練樣本,[X,Y]是測試樣本;
net=newrb(P,T,err_goal,spread); %建立網路
q=sim(net,p);
e=q-T;
plot(p,q); %畫訓練誤差曲線
q=sim(net,X);
e=q-Y;
plot(X,q); %畫測試誤差曲線
訓練前饋網路的第一步是建立網路對象。函數newff建立一個可訓練的前饋網路。這需要4個輸入參數。
第一個參數是一個Rx2的矩陣以定義R個輸入向量的最小值和最大值。
第二個參數是一個設定每層神經元個數的數組。
第三個參數是包含每層用到的傳遞函數名稱的細胞數組。
最後一個參數是用到的訓練函數的名稱。
舉個例子,下面命令將創建一個二層網路。它的輸入是兩個元素的向量,第一層有三個神經元(3),第二層有一個神經元(1)。
第一層的傳遞函數是tan-sigmoid,輸出層的傳遞函數是linear。
輸入向量的第一個元素的范圍是-1到2[-1 2],輸入向量的第二個元素的范圍是0到5[0 5],訓練函數是traingd。
net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd');
這個命令建立了網路對象並且初始化了網路權重和偏置,因此網路就可以進行訓練了。
我們可能要多次重新初始化權重或者進行自定義的初始化。
下面就是初始化的詳細步驟。
在訓練前饋網路之前,權重和偏置必須被初始化。初始化權重和偏置的工作用命令init來實現。這個函數接收網路對象並初始化權重和偏置後返回網路對象。
下面就是網路如何初始化的:
net = init(net);
我們可以通過設定網路參數net.initFcn和net.layer{i}.initFcn這一技巧來初始化一個給定的網路。
net.initFcn用來決定整個網路的初始化函數。前饋網路的預設值為initlay,它允許每一層用單獨的初始化函數。
設定了net.initFcn ,那麼參數net.layer{i}.initFcn 也要設定用來決定每一層的初始化函數。
對前饋網路來說,有兩種不同的初始化方式經常被用到:initwb和initnw。initwb函數根據每一層自己的初始化參數(net.inputWeights{i,j}.initFcn)初始化權重矩陣和偏置。前饋網路的初始化權重通常設為rands,它使權重在-1到1之間隨機取值。這種方式經常用在轉換函數是線性函數時。initnw通常用於轉換函數是曲線函數。它根據Nguyen和Widrow[NgWi90]為層產生初始權重和偏置值,使得每層神經元的活動區域能大致平坦的分布在輸入空間。
㈡ 請問大神:函數擬合神經網路(fitnet)是BP神經網路嗎在線等待中。
是BP神經網路,是一個只有一個隱含層的的BP神經網路。
tansig和purelin作為傳遞函數
另外需要指出的是,在建立的神經網路中,權重和閾值是歸一化後的參數使用的權重和閾值,歸一化的過程是在fitnet()函數中進行的。
具體的問題可以使用下面的代碼來加深理解。
clear
clc
[x,t] = simplefit_dataset;
net = fitnet(10);
net = train(net,x,t);
y = net(x); %x為輸入,t為輸出
%獲取模型參數
w1= net.iw{1,1};
b1=net.b{1};
w2 = net.lw{2,1};
b2=net.b{2};
%%%查看網路的傳遞函數
ss=net.layers{1}.transferFcn;
sw=net.layers{2}.transferFcn;
x1=mapminmax(x); %x1為原始數據歸一化後的輸入數據
[t1,ps]=mapminmax(t); %t1為原始數據歸一化後的輸出數據
t11=w2*(tansig(w1*x1+b1))+b2; %t11為神經網路求取的歸一化輸出數據
t12=mapminmax('reverse',t11,ps); %t12為使用模型參數並且反歸一化後的輸出數據
㈢ BP神經網路的傳遞函數選擇有什麼特定要求我使用高斯函數作為其傳遞函數(激活函數)可行麽
既然是BP神經網路,當然激勵函數就已經基本確定,因為,BP神經網路的隱含層一般是logsig函數,而輸出層為線性函數。
㈣ 在神經網路使用elu激活函數時怎麼使用交叉熵作為損失函數
P、T矩陣均為一列為一個樣本,因此P、T的列數必須相等,否則報錯。你參考下別人的程序,我建議使用newff函數,不要弄得這么復雜。還有P、T的生成不需要那麼復雜,只需要:P(i,:)=YY(i:i+2);附上newff函數的格式為:net=newff(PR,[S1S2SN],{TF1TF2TFN},BTF,BLF,PF),函數newff建立一個可訓練的前饋網路。輸入參數說明:PR:Rx2的矩陣以定義R個輸入向量的最小值和最大值;Si:第i層神經元個數;TFi:第i層的傳遞函數,默認函數為tansig函數;BTF:訓練函數,默認函數為trainlm函數;BLF:權值/閥值學習函數,默認函數為learngdm函數;PF:性能函數,默認函數為mse函數。
㈤ BP神經網路原理
人工神經網路有很多模型,但是日前應用最廣、基本思想最直觀、最容易被理解的是多層前饋神經網路及誤差逆傳播學習演算法(Error Back-Prooaeation),簡稱為BP網路。
在1986年以Rumelhart和McCelland為首的科學家出版的《Parallel Distributed Processing》一書中,完整地提出了誤差逆傳播學習演算法,並被廣泛接受。多層感知網路是一種具有三層或三層以上的階層型神經網路。典型的多層感知網路是三層、前饋的階層網路(圖4.1),即:輸入層、隱含層(也稱中間層)、輸出層,具體如下:
圖4.1 三層BP網路結構
(1)輸入層
輸入層是網路與外部交互的介面。一般輸入層只是輸入矢量的存儲層,它並不對輸入矢量作任何加工和處理。輸入層的神經元數目可以根據需要求解的問題和數據表示的方式來確定。一般而言,如果輸入矢量為圖像,則輸入層的神經元數目可以為圖像的像素數,也可以是經過處理後的圖像特徵數。
(2)隱含層
1989年,Robert Hecht Nielsno證明了對於任何在閉區間內的一個連續函數都可以用一個隱層的BP網路來逼近,因而一個三層的BP網路可以完成任意的n維到m維的映射。增加隱含層數雖然可以更進一步的降低誤差、提高精度,但是也使網路復雜化,從而增加了網路權值的訓練時間。誤差精度的提高也可以通過增加隱含層中的神經元數目來實現,其訓練效果也比增加隱含層數更容易觀察和調整,所以一般情況應優先考慮增加隱含層的神經元個數,再根據具體情況選擇合適的隱含層數。
(3)輸出層
輸出層輸出網路訓練的結果矢量,輸出矢量的維數應根據具體的應用要求來設計,在設計時,應盡可能減少系統的規模,使系統的復雜性減少。如果網路用作識別器,則識別的類別神經元接近1,而其它神經元輸出接近0。
以上三層網路的相鄰層之間的各神經元實現全連接,即下一層的每一個神經元與上一層的每個神經元都實現全連接,而且每層各神經元之間無連接,連接強度構成網路的權值矩陣W。
BP網路是以一種有教師示教的方式進行學習的。首先由教師對每一種輸入模式設定一個期望輸出值。然後對網路輸入實際的學習記憶模式,並由輸入層經中間層向輸出層傳播(稱為「模式順傳播」)。實際輸出與期望輸出的差即是誤差。按照誤差平方最小這一規則,由輸出層往中間層逐層修正連接權值,此過程稱為「誤差逆傳播」(陳正昌,2005)。所以誤差逆傳播神經網路也簡稱BP(Back Propagation)網。隨著「模式順傳播」和「誤差逆傳播」過程的交替反復進行。網路的實際輸出逐漸向各自所對應的期望輸出逼近,網路對輸入模式的響應的正確率也不斷上升。通過此學習過程,確定下各層間的連接權值後。典型三層BP神經網路學習及程序運行過程如下(標志淵,2006):
(1)首先,對各符號的形式及意義進行說明:
網路輸入向量Pk=(a1,a2,...,an);
網路目標向量Tk=(y1,y2,...,yn);
中間層單元輸入向量Sk=(s1,s2,...,sp),輸出向量Bk=(b1,b2,...,bp);
輸出層單元輸入向量Lk=(l1,l2,...,lq),輸出向量Ck=(c1,c2,...,cq);
輸入層至中間層的連接權wij,i=1,2,...,n,j=1,2,...p;
中間層至輸出層的連接權vjt,j=1,2,...,p,t=1,2,...,p;
中間層各單元的輸出閾值θj,j=1,2,...,p;
輸出層各單元的輸出閾值γj,j=1,2,...,p;
參數k=1,2,...,m。
(2)初始化。給每個連接權值wij、vjt、閾值θj與γj賦予區間(-1,1)內的隨機值。
(3)隨機選取一組輸入和目標樣本
(4)用輸入樣本
基坑降水工程的環境效應與評價方法
bj=f(sj) j=1,2,...,p (4.5)
(5)利用中間層的輸出bj、連接權vjt和閾值γt計算輸出層各單元的輸出Lt,然後通過傳遞函數計算輸出層各單元的響應Ct。
基坑降水工程的環境效應與評價方法
Ct=f(Lt) t=1,2,...,q (4.7)
(6)利用網路目標向量
基坑降水工程的環境效應與評價方法
(7)利用連接權vjt、輸出層的一般化誤差dt和中間層的輸出bj計算中間層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(8)利用輸出層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(9)利用中間層各單元的一般化誤差
基坑降水工程的環境效應與評價方法
(10)隨機選取下一個學習樣本向量提供給網路,返回到步驟(3),直到m個訓練樣本訓練完畢。
(11)重新從m個學習樣本中隨機選取一組輸入和目標樣本,返回步驟(3),直到網路全局誤差E小於預先設定的一個極小值,即網路收斂。如果學習次數大於預先設定的值,網路就無法收斂。
(12)學習結束。
可以看出,在以上學習步驟中,(8)、(9)步為網路誤差的「逆傳播過程」,(10)、(11)步則用於完成訓練和收斂過程。
通常,經過訓練的網路還應該進行性能測試。測試的方法就是選擇測試樣本向量,將其提供給網路,檢驗網路對其分類的正確性。測試樣本向量中應該包含今後網路應用過程中可能遇到的主要典型模式(宋大奇,2006)。這些樣本可以直接測取得到,也可以通過模擬得到,在樣本數據較少或者較難得到時,也可以通過對學習樣本加上適當的雜訊或按照一定規則插值得到。為了更好地驗證網路的泛化能力,一個良好的測試樣本集中不應該包含和學習樣本完全相同的模式(董軍,2007)。
㈥ 用MATLAB建立bp神經網路模型,求高手,在線等
Matlab神經網路工具箱提供了一系列用於建立和訓練bp神經網路模型的函數命令,很難一時講全。下面僅以一個例子列舉部分函數的部分用法。更多的函數和用法請仔細查閱Neural Network Toolbox的幫助文檔。
例子:利用bp神經網路模型建立z=sin(x+y)的模型並檢驗效果
%第1步。隨機生成200個采樣點用於訓練
x=unifrnd(-5,5,1,200);
y=unifrnd(-5,5,1,200);
z=sin(x+y);
%第2步。建立神經網路模型。其中參數一是輸入數據的范圍,參數二是各層神經元數量,參數三是各層傳遞函數類型。
N=newff([-5 5;-5 5],[5,5,1],{'tansig','tansig','purelin'});
%第3步。訓練。這里用批訓練函數train。也可用adapt函數進行增長訓練。
N=train(N,[x;y],z);
%第4步。檢驗訓練成果。
[X,Y]=meshgrid(linspace(-5,5));
Z=sim(N,[X(:),Y(:)]');
figure
mesh(X,Y,reshape(Z,100,100));
hold on;
plot3(x,y,z,'.')