如今最熱的方向莫過於深度學習了,什麼AlexNet,GoogleNet,幾乎都耳熟能詳,畢竟畢業設計一般的題目都和深度學習有關。
相信看到這篇文章的同學,對深度學習大概是幹啥的,肯定有所理解。但是可能苦惱於怎麼把我自己的數據導入這些網絡裏,怎麼讓模型輸出分類/識別的結果?
下面以在 Matlab 裏用 AlexNet 進行 分類 爲例,帶大家從零開始使用模型,一直到輸出分類結果。
首先要進行分類的話,肯定需要有已經分好類的數據庫,如下圖所示。ClassficationData文件夾裏有五個子文件夾,代表五類樣本。
可以看到,每個子文件夾中的數據格式均爲jpg
現在要做的事,就是用這些數據,訓練AlexNet模型,使其可以自動對照片進行分類。由於AlexNet對輸入圖片尺寸有要求(227227),所以我們首先要對原始數據庫的圖片尺寸統一爲227227。這部分代碼參考鏈接1。
值得注意的是,在使用鏈接1裏的代碼時,需要預先建立一個新的文件夾,以及裏面的子文件夾(同名),這樣纔可以把修改好的圖片存進來。如下圖:
接下來只需要把照片導入模型裏就OK了,我們這裏參考matlab官方例程,爲大家做個示範,代碼如下:
imds = imageDatastore('F:\模式識別作業\ResizeClassificationData\', ...
'IncludeSubfolders',true,'LabelSource','foldernames');
% 每類樣本中測試集的個數,若每類樣本有50個,測試集:訓練集 = 7:3 = 35:15
numTrainFiles = 35;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');
layers1 = alexnet; % 引入alexnet
layers2 = layers1.Layers(1:end-3); % 去掉alexnet後3層
layers = [layers2 % 修改alexnet後3層
fullyConnectedLayer(5,'WeightLearnRateFactor',20,'BiasLearnRateFactor',20)
softmaxLayer
classificationLayer];
inputSize = layers1.Layers(1).InputSize;
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
options = trainingOptions('sgdm', ... % 模型參數調整
'MiniBatchSize',10, ...
'MaxEpochs',6, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',3, ...
'Verbose',false, ...
'Plots','training-progress');
net = trainNetwork(imdsTrain,layers,options); % 訓練好的模型
YPred = classify(net,imdsValidation); % 預測結果輸出
YValidation = imdsValidation.Labels;
accuracy = sum(YPred == YValidation)/numel(YValidation) % 精度輸出
結果輸出如下:
最後,將整個功能代碼封裝成一個簡單好操作的形式,點下“運行”就完事了,實現 尺寸重定義 + alexnet模型訓練輸出 一條龍,不用再手動建立新的文件夾,效果如下:
同時歡迎大家來技術交流,個人QQ:1356580910,圖像處理探索羣(不只是圖像處理):913931535 ,備註:CSDN深度學習
相關資料推薦如下:👇🏻
⭐基於小波變換的圖像邊緣檢測(matlab祖傳代碼註釋)
⭐Matlab對話框總結