任務:8 類圖片(蘋果、香蕉、盒子、咖啡杯、鍵盤、筆電、易拉罐、水壺),使用 MATLAB 設計 BP 神經網路,分類誤差 < 0.01。已提取 4 維特徵:灰度均值、二值周長、面積、歐拉值。關鍵問題在於目標矩陣 T 的編碼方式與網路架構。
將 8 類編碼為 1~8 單一數值(如 T = [1;2;...;8])錯誤,因 BP 網路輸出層為線性/非線性神經元,無法直接輸出類別索引。正確做法:One-hot 編碼,輸出層 8 個神經元,目標矩陣大小 8 × 樣本數。
% 範例:8 類別,每類 50 張,共 400 樣本
numClasses = 8;
samplesPerClass = 50;
T = zeros(numClasses, numClasses * samplesPerClass);
for c = 1:numClasses
idx = (c-1)*samplesPerClass + 1 : c*samplesPerClass;
T(c, idx) = 1; % 第 c 類樣本,第 c 輸出神經元為 1
end
sqrt(input+output) 到 2*input+1)tansig,輸出層 softmax(分類)或 logsigtrainlm(Levenberg-Marquardt,小數據集快)或 trainscg(大數據集)4 維手工特徵(灰度統計、形狀幾何)對 8 類物件極可能線性不可分,導致訓練收斂但測試準確率低。建議:
net = patternnet([15 10]); % 兩隱藏層
net.trainFcn = 'trainlm';
net.divideParam.trainRatio = 0.7;
net.divideParam.valRatio = 0.15;
net.divideParam.testRatio = 0.15;
[net, tr] = train(net, X, T); % X: 4x400, T: 8x400
Y = net(X);
[~, pred] = max(Y); % 預測類別索引 1~8
accuracy = mean(pred == trueLabels);
目標矩陣必須 One-hot,4 維特徵極大概率不足,建議改用 CNN 或大幅擴充特徵維度。