newff函式

newff函式

newff函式,指的是訓練前饋網路的第一步是建立網路對象,實質是newff函式的參數。newff函式的格式為:net=newff(PR,[S1 S2 ...SN],TF1 TF2...TFN,BTF,BLF,PF)。

功能

訓練前饋網路的第一步是建立網路對象。

函式參數

newff函式的格式為:

net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函式newff建立一個可訓練的前饋網路。輸入參數說明:

PR:Rx2的矩陣以定義R個輸入向量的最小值和最大值;

Si:第i層神經元個數;

TFi:第i層的傳遞函式,默認函式為tansig函式;

BTF:訓練函式,默認函式為trainlm函式;

BLF:權值/閾值學習函式,默認函式為learngdm函式;

PF:性能函式,默認函式為mse函式。

舉例

下面命令將創建一個二層網路。它的輸入是兩個元素的向量,第一層有三個神經元(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]為層產生初始權重和偏置值,使得每層神經元的活動區域能大致平坦的分布在輸入空間。

它比起單純的給權重和偏置隨機賦值有以下優點:

(1)減少神經元的浪費(因為所有神經元的活動區域都在輸入空間內)。

(2)有更快的訓練速度(因為輸入空間的每個區域都在活動的神經元範圍中)。

函式調用

初始化函式被newff所調用。因此當網路創建時,它根據預設的參數自動初始化。init不需要單獨的調用。可是我們可能要重新初始化權重和偏置或者進行自定義的初始化。例如,我們用newff創建的網路,它預設用initnw來初始化第一層。如果我們想要用rands重新初始化第一層的權重和偏置,我們用以下命令:

net.layers{1}.initFcn = 'initwb';

net.inputWeights{1,1}.initFcn = 'rands';

net.biases{1,1}.initFcn = 'rands';

net.biases{2,1}.initFcn = 'rands';

net = init(net);

IW: 輸入層到隱含層的權重矩陣

LW: 隱含層和輸出層間的權重矩陣

b: 閾值向量

如網路為net, 輸入層和輸出均為一個接點情況下,則用

net.IW{1,1}可以看到第一個輸入接點到第一隱含層的權重向量;

net.LW{2,1}可以看到隱含層到輸出層的權值向量;

net.b{1,1}是隱含層的閾值向量,

net.b{2,1}是輸出接點的閾值;

在多輸入輸出下先用

net.IW

net.LW

net.b

查看各矩陣結構,再相套用net.IW{?,?}等語句查到相關的向量

相關詞條

相關搜尋

熱門詞條

聯絡我們