www.gusucode.com > IPCV_Eval_Kit_R2019a_0ce6858工具箱matlab程序源码 > IPCV_Eval_Kit_R2019a_0ce6858/code/demo_files/I5_06_2_1_myTrainCNN.m

    %% 忯崬傒僯儏乕儔儖僱僢僩儚乕僋偺僩儗乕僯儞僌 *****************************************
% Computer Vision System Toolbox, Image Processing Toolbox
% Deep Learning Toolbox,Statistics and Machine Learning Toolbox,
% Parallel Computing Toolbox, CUDA-capable GPU card乮ComputeCapability3.0埲忋乯

%% 弶婜壔
clear;close all;imtool close all;clc;rng('default')

%% 夋憸僨乕僞偺愝掕乮悢帤傪儔儞僟儉側傾僼傿儞曄姺偱曄宍偟偨傕偺傪巊梡乯
%     28x28僺僋僙儖偺8價僢僩僌儗乕僗僋乕儖夋憸偑10000枃
%     僨傿儗僋僩儕柤傪儔儀儖偵 (10000x1偺僇僥僑儕僇儖攝楍)
digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ...
    'nndatasets','DigitDataset');
digitData = imageDatastore(digitDatasetPath,...
        'IncludeSubfolders',true, 'LabelSource','foldernames')

%% 夋憸偺堦晹傪昞帵乮500枃乯
figure; montage(digitData.Files(1:20:end)); truesize;

%% 奺僋儔僗偺夋憸悢偺妋擣
digitData.countEachLabel

%% 妛廗梡(75%)偲専徹梡(25%)偺僨乕僞僙僢僩偵暘妱乮奺僇僥僑儕枅偵敿乆乯
[trainDigitData, testDigitData] = splitEachLabel(digitData, 0.75, 'randomize')
trainDigitData.countEachLabel

%% Layer僋儔僗乮CNN梡偺僋儔僗乯傪巊梡偟丄CNN偺峔憿傪掕媊
%         DropOut憌傪梡偄傞応崌丗椺) dropoutLayer(0.4) % 妛廗僨乕僞偛偲偵丄擖椡僲乕僪偺40%傪儔儞僟儉偵0偵偟偰夁妛廗傪杊巭
layers = [imageInputLayer([28 28 1]);       % 擖椡夋憸僒僀僘丗28x28x1丄擖椡偱柧傞偝偺惓婯壔:0僙儞僞乕
          convolution2dLayer(5,20);         % 5x5x1偺僼傿儖僞傪20僙僢僩(儅僢僾) (弌椡丗24x24x20) 廃埻偺僷僨傿儞僌側偟
          reluLayer();                      % ReLU(Rectified Linear Unit)妶惈壔娭悢憌
          crossChannelNormalizationLayer(5, 'K',1);   % 5僠儍儞僱儖偺斖埻偱丄僠儍僱儖娫偺惓婯壔乮僷儔儊乕僞偼榑暥嶲徠乯
          maxPooling2dLayer(2,'Stride',2);  % max pooling憌丗2x2偺椞堟撪偺嵟戝抣傪弌椡  (弌椡丗12x12x20) 椞堟撪偺暯嬒堏摦傊偺懳墳
            
          convolution2dLayer(5,16);         % 5x5x20偺僼傿儖僞傪16僙僢僩(儅僢僾) (弌椡丗8x8x16) 廃埻偺僷僨傿儞僌側偟
          reluLayer();                      % ReLU
          maxPooling2dLayer(2,'Stride',2);  % max pooling憌丗(弌椡丗4x4x16 = 256師尦)
               
          fullyConnectedLayer(10);          % 慡寢崌憌丗擖椡256師尦丄弌椡10師尦=僇僥僑儕悢
          softmaxLayer();                   % 10屄偺擖椡偵妶惈壔娭悢偲偟偰惓婯壔巜悢娭悢傪揔墳(慡弌椡偱惓婯壔)偟妋棫抣傊曄姺
          classificationLayer()]            % 奺僇僥僑儕偛偲偺僗僐傾偲丄梊應偝傟偨僇僥僑儕傪弌椡

%% Deep Network Designer偱CNN偺儗僀儎乕傪掕媊壜擻
deepNetworkDesigner

%% 妛廗梡僆僾僔儑儞傪丄trainingOptions娭悢傪梡偄愝掕
%     妋棪揑岡攝崀壓朄乮stochastic gradient descent with momentum乯妛廗僨乕僞偺堦晹偺抣偱僷儔儊乕僞傪峏怴
%     昁梫偱偁傟偽丄GPU偺儊儌儕検偵墳偠偰MiniBatchSize傪挷惍
opts = trainingOptions('sgdm', 'MaxEpochs',10, 'InitialLearnRate', 0.001,...
    'ValidationData',testDigitData,...
    'Plots','training-progress');     % 嵟戝10悽戙傑偱妛廗丄

%% [妛廗] 僱僢僩儚乕僋傪嫵巘晅偒妛廗乮SeriesNetwork 僋儔僗偺僆僽僕僃僋僩偑妛廗屻偵惗惉偝傟傞乯
net = trainNetwork(trainDigitData, layers, opts);
%       load('I5_06_2_1_net.mat');           % 偁傜偐偠傔妛廗偟偨寢壥傪梡偄傞応崌

%% [暘椶婍偺専徹] 専徹梡夋憸2500枃偺堦晹乮250枃乯傪昞帵 ************************
figure; montage(testDigitData.Files(1:10:end)); truesize;

%% 専徹梡偺夋憸傪堦枃撉崬傒
I = imread(testDigitData.Files{521});
figure; imshow(I);

%% 妛廗偟偨僱僢僩儚乕僋偱暘椶
YPredClass = classify(net, I)

%% 僋儔僗傊暘椶(2500x1) 偲 偦偺嵺偺僗僐傾(2500x10) 偺寁嶼
[YPredClass, YPredScore] = classify(net, testDigitData);             % predict娭悢偼僗僐傾偺傒弌椡丅昁梫偱偁傟偽丄GPU偺儊儌儕検偵墳偠偰MiniBatchSize傪挷惍

%% 寢壥偺昞帵丗崿崌峴楍偺寁嶼 乮1峴栚:0偺暥帤傪擣幆偝偣偨寢壥)
[confMat order] = confusionmat(testDigitData.Labels, YPredClass)

%% 慡懱偺惛搙(暯嬒)傪寁嶼
accuracy = sum(YPredClass == testDigitData.Labels)/numel(YPredClass)

%% 廔椆














%% 崿崌峴楍偺扨埵傪僷乕僙儞僩傊曄姺乮梫慺扨埵墘嶼乯
confMat = bsxfun(@rdivide, confMat, sum(confMat,2))     % 1師尦偺曽岦傪丄堦曽偺僒僀僘偵奼挘偟偰崌傢偣傞

%% 暿偺僥僗僩夋憸傪弨旛乮Computer Vision Toolbox乯**********************
%        imageDataset傊丄僥僗僩夋憸乮12枃x10暥帤庬乯傊偺愨懳僷僗傪巜掕
pathData = [toolboxdir('vision'), '\visiondata\digits'];
testSet  = imageDatastore([pathData,'\handwritten'], 'LabelSource','foldernames', 'IncludeSubfolders',true)

%% 慡僥僗僩夋憸傪儌儞僞乕僕儏昞帵 (12枃 x 10暥帤庬)
figure; montage(testSet.Files, 'Size', [10,12]);

%% [幆暿] 嶌惉偟偨暘椶婍偱庤彂偒悢帤(120枃)傪幆暿
%        夋憸傪撉崬傓嵺偵宍幃傪偦傠偊傞丗28x28pixel丄敀暥帤丄僌儗乕僗働乕儖丄double宆
testSet.ReadFcn = @(filename) imresize(imcomplement(rgb2gray(imread(filename))), [28 28]);
YPredClass2 = classify(net, testSet);

%% [幆暿] 寢壥偺昞帵
Ir = zeros([28,28,3,120], 'uint8');      % 寢壥傪奿擺偡傞攝楍
for k = 1:size(testSet.Labels,1)
  if YPredClass2(k) == testSet.Labels(k)    %惓偟偄幆暿偼惵怓丄岆擣幆偼愒怓
    labelC = 'blue';
  else
    labelC = 'red';
  end
  Ir(:,:,:,k) = insertText(readimage(testSet,k),[6 4],char(YPredClass2(k)),'FontSize',16,'TextColor',labelC,'BoxOpacity',0.4); 
end
figure;montage(Ir, 'Size', [10,12]);

%% 廔椆




%% 戞2憌栚乮嵟弶偺僼傿儖僞忯傒崬傒憌乯偺摿惈傪壜帇壔
%       乮嵟弶偺憌偼婎杮揑側夋憸偺摿挜:僄僢僕傗宍忬傪拪弌乯
%        20僙僢僩偺僼傿儖僞學悢乮廳傒乯傪壜帇壔
net.Layers(2) 
w1 = gather(net.Layers(2).Weights);      % 5x5x1 偑 20僙僢僩(儅僢僾)
w1g = mat2gray(w1);              % w1偺梫慺偺斖埻傪0~1傊僗働乕儕儞僌
for k = 1:size(w1g, 4)
  w1a(:,:,k) = imadjust(imresize(w1g(:,:,:,k), 5, 'cubic'));   % 25x25僺僋僙儖傊奼戝丄僐儞僩儔僗僩挷惍
end
figure; montage(gather(reshape(w1a,[25 25 1 20])));    % 昞帵

%% 搑拞寢壥傪mat僼傽僀儖傊曐懚偵巊梡偟偨娭悢
%save('I5_06_2_1_net.mat', 'net');


%% Copyright 2016 The MathWorks, Inc.