日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab搭建AlexNet实现手写数字识别

發(fā)布時(shí)間:2024/5/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab搭建AlexNet实现手写数字识别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Matlab搭建AlexNet實(shí)現(xiàn)手寫數(shù)字識別

個(gè)人博客地址

文章目錄

  • Matlab搭建AlexNet實(shí)現(xiàn)手寫數(shù)字識別
    • 環(huán)境
    • 內(nèi)容
    • 步驟
      • 準(zhǔn)備MNIST數(shù)據(jù)集
      • 數(shù)據(jù)預(yù)處理
      • 定義網(wǎng)絡(luò)模型
      • 定義訓(xùn)練超參數(shù)
      • 網(wǎng)絡(luò)訓(xùn)練和預(yù)測
    • 代碼下載

環(huán)境

  • Matlab 2020a
  • Windows10

內(nèi)容

使用Matlab對MNIST數(shù)據(jù)集進(jìn)行預(yù)處理,搭建卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,實(shí)現(xiàn)識別手寫數(shù)字的任務(wù)。在訓(xùn)練過程中,每隔30個(gè)batch輸出一次模型在驗(yàn)證集上的準(zhǔn)確率和損失值。在訓(xùn)練結(jié)束后會輸出驗(yàn)證集中每個(gè)數(shù)字的真實(shí)值、網(wǎng)絡(luò)預(yù)測值和判定概率,并給出總的識別準(zhǔn)確率。

步驟

準(zhǔn)備MNIST數(shù)據(jù)集

為了方便進(jìn)行測試,本次只選用500張MNIST數(shù)據(jù)集,每個(gè)數(shù)字50張。

下載數(shù)據(jù)集后并解壓,為每個(gè)數(shù)字創(chuàng)建單獨(dú)文件夾并將該數(shù)字的所有圖片放在對應(yīng)的文件夾下,如圖1所示。
數(shù)據(jù)集下載地址 提取碼:af6n

手動(dòng)分類結(jié)束后每個(gè)文件夾中應(yīng)有50張圖片。

數(shù)據(jù)預(yù)處理

% 加載數(shù)據(jù)集 imds = imageDatastore(..."./data",...'IncludeSubfolders', true,...'LabelSource','foldernames');

使用imageDatastore加載數(shù)據(jù)集。第一個(gè)參數(shù)填寫數(shù)據(jù)集路徑。由于本次實(shí)驗(yàn)data目錄下含有子文件夾所以IncludeSubfolders需要指定為true。LabelSource表示標(biāo)簽來源,這里使用文件夾名字來代表標(biāo)簽。

ImageDatastore - 屬性:Files: {'D:\data\0\0_1.bmp';'D:\data\0\0_10.bmp';'D:\data\0\0_11.bmp'... and 497 more}Folders: {'D:\data'}Labels: [0; 0; 0 ... and 497 more categorical]AlternateFileSystemRoots: {}ReadSize: 1SupportedOutputFormats: [1×5 string]DefaultOutputFormat: "png"ReadFcn: @readDatastoreImage

上面內(nèi)容為執(zhí)行imageDatastore后返回變量的屬性。可以看出已經(jīng)成功將數(shù)據(jù)集讀入并對每張圖片進(jìn)行l(wèi)abel處理。

由于每個(gè)數(shù)字有50張圖像,因此本次實(shí)驗(yàn)每個(gè)數(shù)字選用30張進(jìn)行訓(xùn)練,另20張進(jìn)行驗(yàn)證。使用splitEachLabel進(jìn)行劃分,得到訓(xùn)練集和驗(yàn)證集。

% 數(shù)據(jù)打亂 imds = shuffle(imds);% 劃分訓(xùn)練集和驗(yàn)證集。每一個(gè)類別訓(xùn)練集有30個(gè),驗(yàn)證集有20個(gè) [imdsTrain,imdsValidation] = splitEachLabel(imds, 30);

使用shuffle進(jìn)行數(shù)據(jù)打亂。得到的imdsTrain和imdsValidation分別有300和200張圖片。

% 將訓(xùn)練集與驗(yàn)證集中圖像的大小調(diào)整成與輸入層的大小相同 augimdsTrain = augmentedImageDatastore([28 28],imdsTrain); augimdsValidation = augmentedImageDatastore([28 28],imdsValidation);

定義網(wǎng)絡(luò)模型

% 構(gòu)建alexnet卷積網(wǎng)絡(luò) alexnet = [imageInputLayer([56,56,1], 'Name', 'Input')convolution2dLayer([11,11],48,'Padding','same','Stride',4, 'Name', 'Conv_1')batchNormalizationLayer('Name', 'BN_1')reluLayer('Name', 'Relu_1')maxPooling2dLayer(3,'Padding','same','Stride',2, 'Name', 'MaxPooling_1')convolution2dLayer([5,5],128,'Padding',2,'Stride',1, 'Name', 'Conv_2')batchNormalizationLayer('Name', 'BN_2')reluLayer('Name', 'Relu_2')maxPooling2dLayer(3,'Padding','same','Stride',2, 'Name', 'MaxPooling_2')convolution2dLayer([3 3],192,'Padding',1,'Stride',1, 'Name', 'Conv_3')batchNormalizationLayer('Name', 'BN_3')reluLayer('Name', 'Relu_3')convolution2dLayer([3 3],192,'Padding',1,'Stride',1, 'Name', 'Conv_4')batchNormalizationLayer('Name', 'BN_4')reluLayer('Name', 'Relu_4')convolution2dLayer([3 3],128,'Stride',1,'Padding',1, 'Name', 'Conv_5')batchNormalizationLayer('Name', 'BN_5')reluLayer('Name', 'Relu_5')maxPooling2dLayer(3,'Padding','same','Stride',2, 'Name', 'MaxPooling_3')fullyConnectedLayer(4096, 'Name', 'FC_1')reluLayer('Name', 'Relu_6')fullyConnectedLayer(4096, 'Name', 'FC_2')reluLayer('Name', 'Relu_7')fullyConnectedLayer(10, 'Name', 'FC_3') % 將新的全連接層的輸出設(shè)置為訓(xùn)練數(shù)據(jù)中的種類softmaxLayer('Name', 'Softmax') % 添加新的Softmax層classificationLayer('Name', 'Output') ]; % 添加新的分類層

使用上面的代碼即可構(gòu)建AlexNet模型。

% 對構(gòu)建的網(wǎng)絡(luò)進(jìn)行可視化分析 lgraph = layerGraph(mynet); analyzeNetwork(lgraph)

定義訓(xùn)練超參數(shù)

% 配置訓(xùn)練選項(xiàng) options = trainingOptions('sgdm', ...'InitialLearnRate',0.001, ... 'MaxEpochs',100, ... 'Shuffle','every-epoch', ...'ValidationData',augimdsValidation, ...'ValidationFrequency',30, ...'Verbose',true, ...'Plots','training-progress');

本次實(shí)驗(yàn)選用sgdm作為優(yōu)化器,初始學(xué)習(xí)率設(shè)置為0.001,最大迭代次數(shù)為100,每次迭代都會打亂數(shù)據(jù),每隔30個(gè)batch進(jìn)行一次驗(yàn)證。

網(wǎng)絡(luò)訓(xùn)練和預(yù)測

% 對網(wǎng)絡(luò)進(jìn)行訓(xùn)練 net = trainNetwork(augimdsTrain, mynet, options); % 將訓(xùn)練好的網(wǎng)絡(luò)用于對新的輸入圖像進(jìn)行分類,得到預(yù)測結(jié)果和判定概率 [YPred, err] = classify(net, augimdsValidation);

其中,YPred是存放網(wǎng)絡(luò)對驗(yàn)證集預(yù)測結(jié)果的數(shù)組,err存放著每個(gè)數(shù)字的判定概率。

% 打印真實(shí)數(shù)字、預(yù)測數(shù)字、判定概率和準(zhǔn)確率 YValidation = imdsValidation.Labels; for i=1:200 fprintf("真實(shí)數(shù)字:%d 預(yù)測數(shù)字:%d", double(YValidation(i,1))-1, double(YPred(i, 1))-1); fprintf(" 判定概率:%f\n", max(err(i, :))); end

運(yùn)行上面代碼即可打印相關(guān)結(jié)果。

... ... 真實(shí)數(shù)字:4 預(yù)測數(shù)字:4 判定概率:0.814434 真實(shí)數(shù)字:0 預(yù)測數(shù)字:0 判定概率:0.657829 真實(shí)數(shù)字:8 預(yù)測數(shù)字:8 判定概率:0.874560 真實(shí)數(shù)字:0 預(yù)測數(shù)字:0 判定概率:0.988826 真實(shí)數(shù)字:6 預(yù)測數(shù)字:6 判定概率:0.970034 ... ... 真實(shí)數(shù)字:5 預(yù)測數(shù)字:5 判定概率:0.806220 真實(shí)數(shù)字:4 預(yù)測數(shù)字:4 判定概率:0.938233 真實(shí)數(shù)字:7 預(yù)測數(shù)字:7 判定概率:0.906994 真實(shí)數(shù)字:7 預(yù)測數(shù)字:7 判定概率:0.837794 真實(shí)數(shù)字:6 預(yù)測數(shù)字:6 判定概率:0.951572 真實(shí)數(shù)字:6 預(yù)測數(shù)字:1 判定概率:0.415834 真實(shí)數(shù)字:5 預(yù)測數(shù)字:5 判定概率:0.789031 真實(shí)數(shù)字:2 預(yù)測數(shù)字:2 判定概率:0.363526 真實(shí)數(shù)字:7 預(yù)測數(shù)字:7 判定概率:0.930049準(zhǔn)確率:0.880000

代碼下載

GitHub下載

總結(jié)

以上是生活随笔為你收集整理的Matlab搭建AlexNet实现手写数字识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。