讓我們開始與網絡連接。 network
函數的工作方式並不直觀。爲了如果你輸入向量正確描述結構來控制,你可以使用view(net)
:
現在我們討論的每個參數不久:
numInputs
- 如果你的網絡將只得到一個輸入數據集,您需要在這裏輸入1
。
numLayers
- 對於虹膜數據集,可以在這裏使用2
。
biasConnect
- 偏置單位用於「增加」輸入和輸出之間的非線性。我們希望網絡能夠近似複雜的非線性函數,這就是爲什麼向兩個圖層添加偏差單位是一個好主意。所以放在這裏[1, 1]
。
inputConnect
- 矢量的尺寸爲numLayers-by-numInputs
。它顯示哪些輸入連接到哪些層。你只有一個輸入連接到第一層,所以在這裏放[1;0]
。
layerConnect
- 矢量的尺寸爲numLayers-by-numLayers
。你有兩層。第一層連接到第二層,但不連接到它自己。從第二層到第一層沒有連接,第二層不會自動饋送。把[0 0; 1 0]
放在這裏。
outputConnect
- 矢量的尺寸爲1-by-numLayers
並顯示哪一層連接到輸出。把[0 1]
放在這裏。
這裏是我們的命令和相應的圖形:
net = network(1, 2, [1; 1], [1;0], [0 0; 1 0], [0 1]);
您可以嘗試使用的參數和所產生的結構是非常複雜的。
網絡配置
現在,您需要配置網絡。您可以在文檔中找到所有參數,我將在這裏描述最重要的部分:
爲層設置正確的激活函數很重要。默認情況下,該功能設置爲purelin
。你可能想在這裏使用像tansig
或logsig
。
您需要設置每個圖層的大小。在你的情況下,我會在第一層使用5或7個單位。第二層的大小應該等於輸出類的數量:3
你的情況。
權重和偏置單元的初始化函數也應該爲每個層設置。
產生的網絡看起來像在這裏:
下面是代碼:
net = network(1, 2, [1; 1], [1;0], [0 0; 1 0], [0 1]);
net.adaptFcn = 'adaptwb';
net.divideFcn = 'dividerand'; %Set the divide function to dividerand (divide training data randomly).
net.performFcn = 'mse';
net.trainFcn = 'trainlm'; % set training function to trainlm (Levenberg-Marquardt backpropagation)
net.plotFcns = {'plotperform', 'plottrainstate', 'ploterrhist', 'plotconfusion', 'plotroc'};
%set Layer1
net.layers{1}.name = 'Layer 1';
net.layers{1}.dimensions = 7;
net.layers{1}.initFcn = 'initnw';
net.layers{1}.transferFcn = 'tansig';
%set Layer2
net.layers{2}.name = 'Layer 2';
net.layers{2}.dimensions = 3;
net.layers{2}.initFcn = 'initnw';
net.layers{2}.transferFcn = 'tansig';
[x,t] = iris_dataset; %load of the iris data set
net = train(net,x, t); %training
y = net(x); %prediction
view(net);
的混淆矩陣看起來不錯。所以網絡運作良好!
一點點shoter方式
如果你想使用一個已經預裝的網絡,您可以使用此代碼:
[x,t] = iris_dataset;
net = patternnet;
net = configure(net,x,t);
net = train(net,x,t); %training
view(net);
y = net(x); %predict
謝謝你這麼多的時間,你花了這些,我真的很感激它 – Izanagi