首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

BP 神經網路 8 類圖片分類:特徵選擇與目標矩陣設計指南

     編輯:程式設計綜合問答

任務:8 類圖片(蘋果、香蕉、盒子、咖啡杯、鍵盤、筆電、易拉罐、水壺),使用 MATLAB 設計 BP 神經網路,分類誤差 < 0.01。已提取 4 維特徵:灰度均值、二值周長、面積、歐拉值。關鍵問題在於目標矩陣 T 的編碼方式與網路架構。

目標矩陣編碼:One-hot 必須

將 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

網路架構建議

  • 輸入層:4 節點(對應 4 維特徵)
  • 隱藏層:1~2 層,節點數 10~20(經驗公式:sqrt(input+output) 到 2*input+1)
  • 輸出層:8 節點(One-hot)
  • 激活函數:隱藏層 tansig,輸出層 softmax(分類)或 logsig
  • 訓練演算法:trainlm(Levenberg-Marquardt,小數據集快)或 trainscg(大數據集)

特徵是否足夠?

4 維手工特徵(灰度統計、形狀幾何)對 8 類物件極可能線性不可分,導致訓練收斂但測試準確率低。建議:

  1. 改用 CNN(如 AlexNet、ResNet18 微調),自動學習深層特徵,準確率通常 > 95%。
  2. 若必須用 BP,至少增加 HOG、LBP、色彩直方圖等特徵至 50~100 維,並做 PCA 降維。

MATLAB 參考代碼片段

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 或大幅擴充特徵維度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved