Matlab 深度學(xué)習(xí)工具箱?入門指南(1)

一存筏、深度學(xué)習(xí)工具箱產(chǎn)品說明
1)創(chuàng)建浸策,分析和訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)
深度學(xué)習(xí)工具箱(以前稱為Neural Network Toolbox?)為使用算法冈涧,預(yù)訓(xùn)練模型和應(yīng)用程序設(shè)計和實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)提供了框架殊者。 您可以使用卷積神經(jīng)網(wǎng)絡(luò)(ConvNet太雨,CNN)和長期短期記憶(LSTM)網(wǎng)絡(luò)對圖像钞支,時間序列和文本數(shù)據(jù)執(zhí)行分類和回歸茫蛹。 您可以使用自定義訓(xùn)練循環(huán),共享權(quán)重和自動區(qū)分功能來構(gòu)建高級網(wǎng)絡(luò)架構(gòu)烁挟,例如生成對抗網(wǎng)絡(luò)(GAN)和暹羅(Simese)網(wǎng)絡(luò)婴洼。 應(yīng)用程序和繪圖可幫助您可視化激活,編輯和分析網(wǎng)絡(luò)體系結(jié)構(gòu)以及監(jiān)視訓(xùn)練進(jìn)度撼嗓。
您可以通過ONNX?格式與TensorFlow?和PyTorch交換模型柬采,并從TensorFlow-Keras和Caffe導(dǎo)入模型。 該工具箱通過預(yù)訓(xùn)練的模型庫(包括NASNet且警,SqueezeNet粉捻,Inceptionv3和ResNet-101)支持轉(zhuǎn)移學(xué)習(xí)。

您可以加快在單GPU或多GPU工作站上的訓(xùn)練斑芜;(使用Parallel Computing Toolbox?)肩刃,或者擴(kuò)展到包括NVIDIA GPU Cloud DGX系統(tǒng)和AmazonEC2?GPU實例在內(nèi)的集群和云(使用MATLAB?Parallel Server?) 。
2)深度網(wǎng)絡(luò)設(shè)計器入門
此示例顯示了如何微調(diào)經(jīng)過預(yù)訓(xùn)練的GoogLeNet網(wǎng)絡(luò),以對新的圖像集合進(jìn)行分類盈包。 此過程稱為轉(zhuǎn)移學(xué)習(xí)沸呐,通常比訓(xùn)練新網(wǎng)絡(luò)更快,更容易呢燥,因為您可以使用較少數(shù)量的培訓(xùn)圖像將學(xué)習(xí)到的功能應(yīng)用于新任務(wù)崭添。 要以交互方式為傳輸學(xué)習(xí)準(zhǔn)備網(wǎng)絡(luò),請使用Deep Network Designer叛氨。
i. 加載預(yù)訓(xùn)練網(wǎng)絡(luò)
加載預(yù)訓(xùn)練的GoogLeNet網(wǎng)絡(luò)呼渣。 如果需要下載網(wǎng)絡(luò),請使用下載鏈接力试。

net= googlenet徙邻;

將網(wǎng)絡(luò)導(dǎo)入Deep Network Designer
打開深度網(wǎng)絡(luò)設(shè)計器。

deepNetworkDesigner

單擊Import畸裳,然后從工作區(qū)中選擇網(wǎng)絡(luò)缰犁。 Deep Network Designer會顯示整個網(wǎng)絡(luò)的縮小視圖。 探索網(wǎng)絡(luò)圖怖糊。 要使用鼠標(biāo)放大帅容,請使用Ctrl +滾輪。


image.png

編輯網(wǎng)絡(luò)以進(jìn)行轉(zhuǎn)移學(xué)習(xí)
要重新訓(xùn)練經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò)以對新圖像進(jìn)行分類伍伤,請使用適合新數(shù)據(jù)集的新層替換最終層并徘。 您必須更改類數(shù)以匹配您的數(shù)據(jù)。

將新的fullyConnectedLayer從“Layer Library”拖到畫布上扰魂。 將OutputSize編輯為新數(shù)據(jù)中的類數(shù)麦乞,在本示例中為5。

編輯學(xué)習(xí)率劝评,以使新層中的學(xué)習(xí)速度比轉(zhuǎn)移層中的學(xué)習(xí)速度更快姐直。 將WeightLearnRateFactor和BiasLearnRateFactor設(shè)置為10。刪除最后一個完全連接的連接蒋畜,然后連接新層声畏。


image.png

更換輸出層。 滾動到“Layer Library”的末尾姻成,然后將新的classificationLayer拖到畫布上插龄。 刪除原始輸出層,然后連接新層科展。


image.png

檢查網(wǎng)絡(luò)
要確保已編輯的網(wǎng)絡(luò)已準(zhǔn)備好進(jìn)行培訓(xùn)均牢,請單擊Analyze,并確保深度學(xué)習(xí)網(wǎng)絡(luò)分析器報告零錯誤才睹。


image.png

導(dǎo)出訓(xùn)練網(wǎng)絡(luò)
返回到深度網(wǎng)絡(luò)設(shè)計器膨处,然后單擊Export见秤。 深度網(wǎng)絡(luò)設(shè)計器將網(wǎng)絡(luò)導(dǎo)出到名為lgraph_1的新變量砂竖,其中包含已編輯的網(wǎng)絡(luò)層真椿。 現(xiàn)在,您可以將圖層變量提供給trainNetwork函數(shù)乎澄。 您還可以生成MATLAB?代碼突硝,以重新創(chuàng)建網(wǎng)絡(luò)體系結(jié)構(gòu),并將其作為layerGraph對象或MATLAB工作區(qū)中的Layer數(shù)組返回置济。

加載數(shù)據(jù)和訓(xùn)練網(wǎng)絡(luò)(Load Data and Train Network)

解壓縮并將新圖像加載為圖像數(shù)據(jù)存儲解恰。 將數(shù)據(jù)分為70%訓(xùn)練數(shù)據(jù)和30%驗證數(shù)據(jù)。

unzip('MerchData.zip');  %解壓數(shù)據(jù)文件
 imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames'); 
 [imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized'); %劃分?jǐn)?shù)據(jù)集浙于,7:3

調(diào)整圖像大小以匹配預(yù)先訓(xùn)練的網(wǎng)絡(luò)輸入大小护盈。

augimdsTrain = augmentedImageDatastore([224 224],imdsTrain);
 augimdsValidation = augmentedImageDatastore([224 224],imdsValidation);

指定訓(xùn)練選項。
?指定最小批量大小羞酗,即每次迭代中使用多少個圖像腐宋。
?指定少量的時期。 時期是整個訓(xùn)練數(shù)據(jù)集的完整訓(xùn)練周期檀轨。 對于轉(zhuǎn)學(xué)胸竞,您不需要培訓(xùn)很多時間。
在每個時期都對數(shù)據(jù)進(jìn)行洗牌参萄。
?將InitialLearnRate設(shè)置為一個較小的值卫枝,以減慢傳輸層中的學(xué)習(xí)速度。
?指定驗證數(shù)據(jù)和較小的驗證頻率讹挎。
?在訓(xùn)練過程中打開訓(xùn)練圖以監(jiān)視進(jìn)度校赤。

options = trainingOptions('sgdm', ...
'MiniBatchSize',10, ...
'MaxEpochs',6, ...
'Shuffle','every-epoch', ...
'InitialLearnRate',1e-4, ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',6, ...
'Verbose',false, ...
'Plots','training-progress');

要訓(xùn)??練網(wǎng)絡(luò),請將從應(yīng)用程序lgraph_1導(dǎo)出的圖層筒溃,訓(xùn)練圖像和選項提供給trainNetwork函數(shù)马篮。 默認(rèn)情況下,trainNetwork使用GPU(如果有)(需要Parallel Computing Toolbox?)铡羡。 否則积蔚,它將使用CPU。訓(xùn)練很快烦周,因為數(shù)據(jù)集很小尽爆。

netTransfer = trainNetwork(augimdsTrain,lgraph_1,options);
image.png

測試訓(xùn)練好的的網(wǎng)絡(luò)
使用微調(diào)網(wǎng)絡(luò)對驗證圖像進(jìn)行分類,然后計算分類精度读慎。

[YPred,probs] = classify(netTransfer,augimdsValidation); 
accuracy = mean(YPred == imdsValidation.Labels)

accuracy = 1
顯示四個帶有預(yù)測標(biāo)簽和預(yù)測概率的樣本驗證圖像漱贱。

idx = randperm(numel(augimdsValidation.Files),4); 
figure 
for i = 1:4 
  subplot(2,2,i) 
  I = readimage(imdsValidation,idx(i)); 
  imshow(I) 
  label = YPred(idx(i));
  title(string(label) + ", " + num2str(100*max(probs(idx(i),:)),3) + "%");
 end
image.png

要了解更多信息并嘗試其他經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò),請參閱Deep Network Designer夭委。

  1. 在10行MATLAB代碼中嘗試深度學(xué)習(xí)
    本示例說明了如何使用深度學(xué)習(xí)僅使用10行MATLAB代碼來識別實時網(wǎng)絡(luò)攝像頭上的對象幅狮。 嘗試該示例,了解開始使用MATLAB進(jìn)行深度學(xué)習(xí)有多么簡單。
    1 運行這些命令以獲取所需的下載內(nèi)容崇摄,連接到網(wǎng)絡(luò)攝像頭擎值,并獲取預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)。
camera = webcam; % Connect to the camera 
net = alexnet; % Load the neural network

如果您需要安裝網(wǎng)絡(luò)攝像頭和alexnet附加組件逐抑,則會顯示來自每個功能的消息鸠儿,并帶有一個鏈接,以幫助您使用“附加組件資源管理器”下載免費的附加組件厕氨。 或者进每,請參閱AlexNet網(wǎng)絡(luò)的深度學(xué)習(xí)工具箱模型和USB網(wǎng)絡(luò)攝像頭的MATLAB支持包。

安裝用于AlexNet網(wǎng)絡(luò)的深度學(xué)習(xí)工具箱模型后命斧,可以使用它對圖像進(jìn)行分類田晚。 AlexNet是一種預(yù)先訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)(CNN),已經(jīng)在超過一百萬張圖像上進(jìn)行了訓(xùn)練国葬,并且可以將圖像分類為1000個對象類別(例如贤徒,鍵盤,鼠標(biāo)胃惜,咖啡杯泞莉,鉛筆和許多動物)。

運行以下代碼以顯示和分類實時圖像船殉。 將網(wǎng)絡(luò)攝像頭指向一個對象鲫趁,然后神經(jīng)網(wǎng)絡(luò)報告其認(rèn)為該網(wǎng)絡(luò)攝像頭正在顯示的對象類別。 它將一直對圖像進(jìn)行分類利虫,直到您按Ctrl + C挨厚。 該代碼使用imresize調(diào)整網(wǎng)絡(luò)圖像的大小。

while true im = snapshot(camera); % Take a picture
   image(im); % Show the picture 
   im = imresize(im,[227 227]); % Resize the picture for alexnet 
   label = classify(net,im); % Classify the picture 
  title(char(label)); % Show the class label 
  drawnow 
end

在此示例中糠惫,網(wǎng)絡(luò)將咖啡杯正確分類疫剃。 對周圍物體進(jìn)行實驗,以查看網(wǎng)絡(luò)的準(zhǔn)確性硼讽。


image.png

要觀看此示例的視頻巢价,請參見《 MATLAB代碼的11行》中的“深度學(xué)習(xí)”。
要了解如何擴(kuò)展此示例并顯示類別的概率分?jǐn)?shù)固阁,請參閱“使用深度學(xué)習(xí)對網(wǎng)絡(luò)攝像頭圖像進(jìn)行分類”壤躲。
對于深度學(xué)習(xí)的下一步,您可以將經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò)用于其他任務(wù)备燃。
通過轉(zhuǎn)移學(xué)習(xí)或特征提取解決圖像數(shù)據(jù)上的新分類問題碉克。 有關(guān)示例,請參閱“使用遷移學(xué)習(xí)更快地開始深度學(xué)習(xí)”和“使用從預(yù)訓(xùn)練網(wǎng)絡(luò)中提取的特征訓(xùn)練分類器”并齐。 要嘗試其他預(yù)訓(xùn)練的網(wǎng)絡(luò)漏麦,請參閱“預(yù)訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)”客税。

  1. 使用預(yù)訓(xùn)練網(wǎng)絡(luò)對圖像進(jìn)行分類
    這個例子展示了如何使用預(yù)訓(xùn)練的深度卷積神經(jīng)網(wǎng)絡(luò)GoogLeNet對圖像進(jìn)行分類。

    GoogLeNet已經(jīng)接受了超過一百萬張圖像的培訓(xùn)撕贞,可以將圖像分類為1000個對象類別(例如鍵盤更耻,咖啡杯,鉛筆和許多動物)麻掸。 該網(wǎng)絡(luò)已經(jīng)為各種圖像學(xué)習(xí)了豐富的功能表示酥夭。 網(wǎng)絡(luò)將圖像作為輸入,然后輸出圖像中對象的標(biāo)簽以及每個對象類別的概率脊奋。

加載預(yù)訓(xùn)練網(wǎng)絡(luò)
加載預(yù)訓(xùn)練的GoogLeNet網(wǎng)絡(luò)。 您也可以選擇加載其他預(yù)訓(xùn)練網(wǎng)絡(luò)以進(jìn)行圖像分類疙描。 此步驟需要適用于GoogLeNet網(wǎng)絡(luò)的Deep Learning Toolbox?模型支持包诚隙。 如果您沒有安裝必需的支持包,則該軟件將提供下載鏈接起胰。

net=googlenet;

讀取圖像并調(diào)整其大小

您要分類的圖像的大小必須與網(wǎng)絡(luò)的輸入大小相同久又。 對于GoogLeNet,網(wǎng)絡(luò)輸入大小是圖像輸入層的InputSize屬性效五。

讀取要分類的圖像地消,然后將其調(diào)整為網(wǎng)絡(luò)的輸入大小。
調(diào)整大小會稍微改變圖像的縱橫比畏妖。

I = imread("peppers.png");
inputSize = net.Layers(1).InputSize; 
I = imresize(I,inputSize(1:2));

分類并顯示圖像
用預(yù)測的標(biāo)簽分類并顯示圖像脉执。

label = classify(net,I);
figure
imshow(I)
title(string(label))
image.png

有關(guān)更詳細(xì)的示例,該示例還顯示了如何同時顯示最高預(yù)測及其相關(guān)概率戒劫,請參閱“使用GoogLeNet對圖像進(jìn)行分類”半夷。

對于深度學(xué)習(xí)的下一步,您可以將經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò)用于其他任務(wù)迅细。 通過轉(zhuǎn)移學(xué)習(xí)或特征提取解決圖像數(shù)據(jù)上的新分類問題巫橄。 有關(guān)示例,請參閱“使用遷移學(xué)習(xí)更快地開始深度學(xué)習(xí)”和“使用從預(yù)訓(xùn)練網(wǎng)絡(luò)中提取的特征訓(xùn)練分類器”茵典。 要嘗試其他預(yù)訓(xùn)練的網(wǎng)絡(luò)湘换,請參閱“預(yù)訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)”。
參考:

  1. Szegedy, Christian, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, and Andrew Rabinovich. "Going deeper with convolutions." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1-9. 2015.
  2. BVLC GoogLeNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet

二统阿、遷移學(xué)習(xí)入門
此示例顯示了如何使用轉(zhuǎn)移學(xué)習(xí)來重新訓(xùn)練ResNet-18(一種預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò))以對一組新圖像進(jìn)行分類彩倚。 嘗試以下示例,了解開始使用MATLAB?進(jìn)行深度學(xué)習(xí)有多么簡單砂吞。

轉(zhuǎn)移學(xué)習(xí)通常用于深度學(xué)習(xí)應(yīng)用程序署恍。 您可以采用經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò),并將其用作學(xué)習(xí)新任務(wù)的起點蜻直。 與使用從頭開始隨機(jī)初始化權(quán)重的網(wǎng)絡(luò)進(jìn)行訓(xùn)練相比盯质,通過遷移學(xué)習(xí)對網(wǎng)絡(luò)進(jìn)行調(diào)整通常會更快袁串,更輕松。 您可以使用少量的訓(xùn)練圖像將學(xué)習(xí)到的功能快速轉(zhuǎn)移到新任務(wù)中呼巷。


image.png

Load Data
解壓縮并將新圖像加載為圖像數(shù)據(jù)存儲囱修。 將數(shù)據(jù)分為訓(xùn)練和驗證數(shù)據(jù)集。 使用70%的圖像進(jìn)行訓(xùn)練王悍,并使用30%的圖像進(jìn)行驗證破镰。

unzip('MerchData.zip');
 imds = imageDatastore('MerchData','IncludeSubfolders',true,'LabelSource','foldernames'); [imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomized');

加載預(yù)訓(xùn)練網(wǎng)絡(luò)
加載預(yù)訓(xùn)練的ResNet-18網(wǎng)絡(luò)。 如果未安裝用于ResNet-18網(wǎng)絡(luò)的Deep Learning Toolbox?模型压储,則該軟件將提供下載鏈接鲜漩。 ResNet-18已經(jīng)接受了超過一百萬張圖像的培訓(xùn),可以將圖像分類為1000個對象類別(例如鍵盤集惋,咖啡杯孕似,鉛筆和許多動物)。 該網(wǎng)絡(luò)已經(jīng)為各種圖像學(xué)習(xí)了豐富的功能表示刮刑。 網(wǎng)絡(luò)將圖像作為輸入喉祭,輸出圖像中對象的標(biāo)簽以及每個對象類別的概率。 要使用不同的預(yù)訓(xùn)練網(wǎng)絡(luò)執(zhí)行轉(zhuǎn)移學(xué)習(xí)雷绢,請參閱“訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)對新圖像進(jìn)行分類”泛烙。

net=resnet18;

替換最終層
要重新訓(xùn)練ResNet-18以對新圖像進(jìn)行分類,請?zhí)鎿Q網(wǎng)絡(luò)的最后一個完全連接的層和最后一個分類層翘紊。 在ResNet-18中蔽氨,這些層分別具有名稱'fc1000'和'ClassificationLayer_predictions'。 將新的完全連接層設(shè)置為與新數(shù)據(jù)集中的類數(shù)相同的大邢枷(在此示例中為5)孵滞。 要在新層中學(xué)習(xí)比在傳輸層中學(xué)習(xí)更快,請增加完全連接層的學(xué)習(xí)率因子鸯匹。

numClasses = numel(categories(imdsTrain.Labels)); 
lgraph = layerGraph(net); 
newFCLayer = fullyConnectedLayer(numClasses,'Name','new_fc','WeightLearnRateFactor',10,');
lgraph = replaceLayer(lgraph,'fc1000',newFCLayer);
 newClassLayer = classificationLayer('Name','new_classoutput'); 
lgraph = replaceLayer(lgraph,'ClassificationLayer_predictions',newClassLayer);

訓(xùn)練網(wǎng)絡(luò)

網(wǎng)絡(luò)需要大小為224 x 224 x 3的輸入圖像坊饶,但是圖像數(shù)據(jù)存儲區(qū)中的圖像具有不同的大小。 使用增強(qiáng)圖像數(shù)據(jù)存儲區(qū)來自動調(diào)整訓(xùn)練圖像的大小殴蓬。 您還可以使用imageDataAugmenter來指定要在訓(xùn)練圖像上執(zhí)行的其他增強(qiáng)操作匿级,以幫助防止網(wǎng)絡(luò)過度擬合。

inputSize = net.Layers(1).InputSize; 
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain); augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);

指定訓(xùn)練選項染厅,包括小批量大小和驗證數(shù)據(jù)痘绎。 將InitialLearnRate設(shè)置為一個較小的值可以減慢所傳輸層中的學(xué)習(xí)速度。 在上一步中肖粮,您增加了全連接層的學(xué)習(xí)速率因子孤页,以加快新的最終層的學(xué)習(xí)速度。 學(xué)習(xí)速率設(shè)置的這種組合導(dǎo)致僅在新層中進(jìn)行快速學(xué)習(xí)涩馆,而在其他層中進(jìn)行較慢的學(xué)習(xí)行施。

options = trainingOptions('sgdm', ...
'MiniBatchSize',10, ...
'MaxEpochs',8, ...
'InitialLearnRate',1e-4, ...
'Shuffle','every-epoch', ...
'ValidationData',augimdsValidation, ...
'ValidationFrequency',5, ...
'Verbose',false, ...
'Plots','training-progress');

使用訓(xùn)練數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò)允坚。 默認(rèn)情況下,trainNetwork使用GPU(如果有)(需要Parallel Computing Toolbox?和具有CUDA?功能且計算能力為3.0或更高的GPU)蛾号。 否則稠项,它將使用CPU。

trainedNet = trainNetwork(augimdsTrain,lgraph,options);
image.png

分類驗證圖像
使用微調(diào)網(wǎng)絡(luò)對驗證圖像進(jìn)行分類鲜结,然后計算分類精度展运。

YPred = classify(trainedNet,augimdsValidation); 
accuracy = mean(YPred == imdsValidation.Labels)

accuracy = 1

學(xué)到更多
要使用不同的預(yù)訓(xùn)練網(wǎng)絡(luò)執(zhí)行轉(zhuǎn)移學(xué)習(xí),請參閱“訓(xùn)練深度學(xué)習(xí)網(wǎng)絡(luò)對新圖像進(jìn)行分類”精刷。 要嘗試使用Deep Network Designer應(yīng)用程序進(jìn)行轉(zhuǎn)移學(xué)習(xí)拗胜,請參閱“使用Deep Network Designer進(jìn)行轉(zhuǎn)移學(xué)習(xí)”。 有關(guān)預(yù)訓(xùn)練網(wǎng)絡(luò)的列表和比較贬养,請參閱“預(yù)訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)”挤土。

參考文獻(xiàn)

[1] Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. "ImageNet Classification with Deep Convolutional Neural Networks." Advances in neural information processing systems. 2012.

[2] BVLC AlexNet Model. https://github.com/BVLC/caffe/tree/master/models/bvlc_alexnet

三、創(chuàng)建簡單的圖像分類網(wǎng)絡(luò)

該示例顯示了如何創(chuàng)建和訓(xùn)練用于深度學(xué)習(xí)分類的簡單卷積神經(jīng)網(wǎng)絡(luò)误算。 卷積神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)必不可少的工具,特別適合于圖像識別迷殿。
該示例演示如何:
?加載圖像數(shù)據(jù)儿礼。
?定義網(wǎng)絡(luò)體系結(jié)構(gòu)。
?指定訓(xùn)練選項庆寺。
?訓(xùn)練網(wǎng)絡(luò)蚊夫。
?預(yù)測新數(shù)據(jù)的標(biāo)簽并計算分類準(zhǔn)確性。
i)載入數(shù)據(jù)
將數(shù)字樣本數(shù)據(jù)加載為圖像數(shù)據(jù)存儲懦尝。 imageDatastore函數(shù)根據(jù)文件夾名稱自動標(biāo)記圖像知纷。

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
'nndatasets','DigitDataset'); 


imds = imageDatastore(digitDatasetPath, ...
'IncludeSubfolders',true, ...
'LabelSource','foldernames');

將數(shù)據(jù)分為訓(xùn)練和驗證數(shù)據(jù)集,以便訓(xùn)練集中的每個類別包含750張圖像陵霉,而驗證集包含每個標(biāo)簽中的其余圖像琅轧。 splitEachLabel將圖像數(shù)據(jù)存儲區(qū)分為兩個新的數(shù)據(jù)存儲區(qū),以進(jìn)行訓(xùn)練和驗證踊挠。

numTrainFiles = 750; 

[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize');

ii) 定義網(wǎng)絡(luò)架構(gòu)

定義卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)乍桂。 在網(wǎng)絡(luò)輸入層中指定圖像的大小,并在分類層之前指定完全連接層中的類數(shù)效床。 每個圖像為28 x 28 x 1像素睹酌,共有10個類別。

inputSize = [28 28 1]; 
numClasses = 10; 
layers = [ imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses)
 softmaxLayer classificationLayer];

有關(guān)深度學(xué)習(xí)層的更多信息剩檀,請參見“深度學(xué)習(xí)層列表”憋沿。

iii)訓(xùn)練網(wǎng)絡(luò)
指定訓(xùn)練選項并訓(xùn)練網(wǎng)絡(luò)。
默認(rèn)情況下沪猴,trainNetwork使用GPU(如果有)(需要Parallel Computing Toolbox?和具有CUDA?功能且計算能力為3.0或更高的GPU)辐啄。 否則采章,它將使用CPU。 您也可以使用trainingOptions的“ ExecutionEnvironment”名稱/值對參數(shù)指定執(zhí)行環(huán)境则披。

options = trainingOptions('sgdm', ...
'MaxEpochs',4, ...
'ValidationData',imdsValidation, ...
'ValidationFrequency',30, ...
'Verbose',false, ...
'Plots','training-progress'); 

net = trainNetwork(imdsTrain,layers,options); 
![image.png](https://upload-images.jianshu.io/upload_images/14045085-ff0c55fa76589a8d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有關(guān)訓(xùn)練選項的更多信息共缕,請參見“設(shè)置參數(shù)和訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)”。
iv) 測試網(wǎng)絡(luò)
對驗證數(shù)據(jù)進(jìn)行分類并計算分類準(zhǔn)確性士复。

YPred = classify(net,imdsValidation); YValidation = imdsValidation.Labels; accuracy = mean(YPred == YValidation)

accuracy=0.9892
對于深度學(xué)習(xí)的下一步图谷,您可以嘗試將經(jīng)過預(yù)訓(xùn)練的網(wǎng)絡(luò)用于其他任務(wù)。 通過轉(zhuǎn)移學(xué)習(xí)或特征提取解決圖像數(shù)據(jù)上的新分類問題阱洪。 有關(guān)示例便贵,請參閱“使用遷移學(xué)習(xí)更快地開始深度習(xí)”和“使用從預(yù)訓(xùn)練網(wǎng)絡(luò)中提取的特征訓(xùn)練分類器”。 要了解有關(guān)預(yù)訓(xùn)練網(wǎng)絡(luò)的更多信息冗荸,請參見“預(yù)訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)”承璃。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蚌本,隨后出現(xiàn)的幾起案子盔粹,更是在濱河造成了極大的恐慌,老刑警劉巖程癌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷嗡,死亡現(xiàn)場離奇詭異,居然都是意外死亡嵌莉,警方通過查閱死者的電腦和手機(jī)进萄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锐峭,“玉大人中鼠,你說我怎么就攤上這事⊙伛” “怎么了援雇?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抛寝。 經(jīng)常有香客問我熊杨,道長,這世上最難降的妖魔是什么盗舰? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任晶府,我火速辦了婚禮,結(jié)果婚禮上钻趋,老公的妹妹穿的比我還像新娘川陆。我一直安慰自己,他們只是感情好蛮位,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布较沪。 她就那樣靜靜地躺著鳞绕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尸曼。 梳的紋絲不亂的頭發(fā)上们何,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音控轿,去河邊找鬼冤竹。 笑死,一個胖子當(dāng)著我的面吹牛茬射,可吹牛的內(nèi)容都是我干的鹦蠕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼在抛,長吁一口氣:“原來是場噩夢啊……” “哼钟病!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刚梭,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肠阱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朴读,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辖所,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年磨德,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆视。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡典挑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啦吧,到底是詐尸還是另有隱情您觉,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布授滓,位于F島的核電站琳水,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏般堆。R本人自食惡果不足惜在孝,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淮摔。 院中可真熱鬧私沮,春花似錦、人聲如沸和橙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至晰搀,卻和暖如春五辽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背外恕。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工杆逗, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吁讨。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓髓迎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親建丧。 傳聞我的和親對象是個殘疾皇子排龄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容