由於matlab升級,已經不能想以前一樣直接在newff函數裏面規定好隱含層多少個,或者幾層,還可以有多個神經元的輸出層。改版後需要輸出層變成矩陣的形式,神經網絡工具箱可以自動識別輸出層有幾個神經元。詳細代碼如何下:
num=xlsread('data_shengzheng.xlsx','Sheet1','A2:I11');
input_train=num(1:9,1:8)';
output_train=num(1:9,9)';
input_test=num(10,1:8)';
%歸一化處理
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%構造9個神經元的輸出層
for i= 1:9
switch outputn(i)
case 1
outputn(i,:)=[1 0 0 0 0 0 0 0 0];
case 2
outputn(i,:)=[0 1 0 0 0 0 0 0 0];
case 3
outputn(i,:)=[0 0 1 0 0 0 0 0 0];
case 4
outputn(i,:)=[0 0 0 1 0 0 0 0 0];
case 5
outputn(i,:)=[0 0 0 0 1 0 0 0 0];
case 6
outputn(i,:)=[0 0 0 0 0 1 0 0 0];
case 7
outputn(i,:)=[0 0 0 0 0 0 1 0 0];
case 8
outputn(i,:)=[0 0 0 0 0 0 0 1 0];
case 9
outputn(i,:)=[0 0 0 0 0 0 0 0 1];
end
end
net=newff(inputn,outputn,8);
net.trainParam.epochs=100;%迭代次數
net.trainParam.lr=0.1;%學習率
net.trainParam.goal=0.00004;%誤差平方和
net=train(net,inputn,outputn);%網絡訓練
data_shengzheng.xlsx數據內容爲:
結果如下: