生活随笔
收集整理的這篇文章主要介紹了
【实操】深度学习网络万万千,到底怎么把我的数据放进去?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如今最熱的方向莫過于深度學習了,什么AlexNet,GoogleNet,幾乎都耳熟能詳,畢竟畢業設計一般的題目都和深度學習有關。
相信看到這篇文章的同學,對深度學習大概是干啥的,肯定有所理解。但是可能苦惱于怎么把我自己的數據導入這些網絡里,怎么讓模型輸出分類/識別的結果?
下面以在 Matlab 里用 AlexNet 進行 分類 為例,帶大家從零開始使用模型,一直到輸出分類結果。
首先要進行分類的話,肯定需要有已經分好類的數據庫,如下圖所示。ClassficationData文件夾里有五個子文件夾,代表五類樣本。
可以看到,每個子文件夾中的數據格式均為jpg
現在要做的事,就是用這些數據,訓練AlexNet模型,使其可以自動對照片進行分類。由于AlexNet對輸入圖片尺寸有要求(227227),所以我們首先要對原始數據庫的圖片尺寸統一為227227。這部分代碼參考鏈接1。
鏈接1:Matlab批量修改文件夾中照片尺寸
值得注意的是,在使用鏈接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)softmaxLayerclassificationLayer
];
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模型訓練輸出 一條龍,不用再手動建立新的文件夾,效果如下:
猜你喜歡:👇🏻
?基于小波變換的圖像邊緣檢測(matlab祖傳代碼注釋)
?Matlab對話框總結
總結
以上是生活随笔為你收集整理的【实操】深度学习网络万万千,到底怎么把我的数据放进去?的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。