主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을문으로보려면여기를클릭하십시오。

간단한분류용딥러닝신경망만들기

이예제에서는딥러닝분류용으로간단한컨벌루션신경망을만들고훈련시키는방법을보여줍니다。컨벌루션신경망은딥러닝분야의필수툴로서,특히상식에적합합니다。

이예제에서는다음을수행하는방법을보여줍니다。

  • 상데이터를불러와서살펴봅니다。

  • 신경망아키텍처를정의합니다。

  • 훈련옵션을지정합니다。

  • 신경망을훈련시킵니다。

  • 새로운데이터의레이블을예측하고분류정확도를계산합니다。

간단한상분류신경망을대화형방식으로만들고훈련시키는방법을보여주는예제는심층신경망디자이너를사용하여간단한상분류신경망만들기항목을참조하십시오。

상데이터를불러와서살펴보기

샘플숫자데이터를상데이터저장소로서불러옵니다。imageDatastore는폴더이름을기준으로상에자동으로레이블을지정하고데이터를ImageDatastore객체로저장합니다。영상데이터저장소를사용하면메모리에담을수없는데이터를포함하여다량의영상데이터를저장할수있고컨벌루션신경망훈련중에영상배치를효율적으로읽어들일수있습니다。

digitDatasetPath = fullfile(matlabroot,“工具箱”“nnet”“nndemos”...“nndatasets”“DigitDataset”);imds = imageDatastore(digitDatasetPath,...“IncludeSubfolders”,真的,“LabelSource”“foldernames”);

데이터저장소의상몇개를시합니다。

图;Perm = randperm(10000,20);I = 1:20 subplot(4,5, I);imshow (imds.Files{烫发(i)});结束

각범주에속한상의개수를계산합니다。labelCount는레이블과각레이블을갖는상의개수가포함된테이블입니다。데이터저장소에는0부터9까지의각숫자에대해1000개씩,총10000개의영상이포함됩니다。신경망의마지막완전연결계층에있는클래스의개수를OutputSize수로지정할수있습니다。

labelCount = countEachLabel(imds)
labelCount =10×2表标签计数_____ _____ 0 1000 1 1000 2 1000 3 1000 4 1000 5 1000 6 1000 7 1000 8 1000 9 1000

신경망입력계층에있는상의개수를지정해야합니다。digitData에있는첫번째상의크기를확합니다。각상은28×28×1픽셀입니다。

Img = readimage(imds,1);大小(img)
ans =1×228日28日

훈련세트와검세트지정하기

훈련세트의각범주에750개영상이포함되고검증세트에각레이블의나머지영상이포함되도록데이터를훈련데이터세트와검증데이터세트로나눕니다。splitEachLabel은데이터저장소digitData를2개의새로운데이터저장소trainDigitDatavalDigitData로분할합니다。

numTrainFiles = 750;[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,“随机”);

신경망아키텍처정의하기

컨벌루션신경망아키텍처를정의합니다。

图层= [imageInputLayer([28 28 1])卷积2dlayer (3,8,“填充”“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(16日“填充”“相同”maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”“相同”batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];

상입력계층imageInputLayer에상크기를지정합니다。이예제에서상크기는28×28×1입니다。각수치는높이,너비,채널크기에대응됩니다。숫자데이터는회색조숫자데이터는회색조상으로이루어져있으므로채널크기(색채널)는1입니다。컬러컬러상의경우채널크기는RGB값에대응하는3입니다。trainNetwork는기본적으로훈련을시작할때데이터를섞기때문에데이터를직접섞지않아도됩니다。trainNetwork는훈련중에매纪元가시작할때마다데이터를자동으로섞을수도있습니다。

컨벌루션계층컨벌루션계층의첫번째수는filterSize입니다。이것은상을따라스캔할때훈련함수가사용하는필터의높이와너비입니다。이예제에서3은필터크기가3×3임을나타냅니다。필터의높이와너비를다른크기로지정할수있습니다。두번째수는필터의개수numFilters입니다。이것은입력의동일한역에연결되는뉴런의개수입니다。이파라미터는특징맵의개수를결정합니다。“填充”이름-값쌍通讯录수를사용하여입력특징맵에채우기를추가합니다。디폴트스트라이드가1컨벌루션계층의경우,“相同”채우기를사용하면공간출력크기가입력크기와같아집니다。convolution2dLayer의이름값-쌍通讯录수를사용하여이계층의스트라이드와학습률을정의할수도있습니다。

배치정규화계층배치정규화계층은신경망전체에전파되는활성화값과기울기값을정규화하여신경망훈련을보다쉬운최적화문제로만들어줍니다。컨벌루션계층과비선형계층(ReLU계층등)사이에배치정규화계층을사용하면신경망훈련속도를높이고신경망초기화에대한민감도를줄일수있습니다。배치정규화계층은batchNormalizationLayer를사용하여만듭니다。

ReLU계층배치정규화계층뒤에는비선형활성화함수가옵니다。가장자주사용되는활성화함수는ReLU(修正线性单元)입니다。ReLU계층은reluLayer를사용하여만듭니다。

최댓값풀링계층컨벌루션계층(활성화함수사용)에는특징맵의공간크기를줄여주고중복된공간정보를제거하는다운샘플링연산이뒤따르는경우가있습니다。다운샘플링을수행하면계층당필요한연산량을늘리지않고도보다심층의컨벌루션계층에있는필터개수를늘릴수있습니다。다운샘플링을수행하는한가지방법최댓값풀링은maxPooling2dLayer를사용하여만듭니다。최댓값풀링계층은첫번째수poolSize로지정된입력값이나타내는직사각형역의최댓값을반환합니다。이예제에서직사각형이예제에서직사각형역의크기는[2,2]입니다。“步”이름——값쌍인수는훈련함수가입력값을차례대로스캔할때적용하는스텝크기를지정합니다。

완전연결계층컨벌루션계층과다운샘플링계층뒤에는하나이상의완전연결계층이옵니다。이름에서알수있듯이완전연결계층의뉴런들은직전계층의모든뉴런에연결됩니다。이계층은이전계층이상에서학습한특징들을조합하여보다큰패턴을식별합니다。마지막완전연결계층은특징들을조합하여상을분류합니다。따라서마지막완전연결계층의OutputSize파라미터는목@ @데이터의클래스개수와같습니다。이예제에서출력크기는10개의클래스에대응하는10입니다。완전연결계층은fullyConnectedLayer를사용하여만듭니다。

소프트맥스계층소프트맥스활성화함수는완전연결계층의출력값을정규화합니다。소프트맥스계층의출력값은합이1 rm양수로구성됩니다。이값은분류계층에의해분류확률로사용될수있습니다。소프트맥스계층은softmaxLayer함수를사용하여마지막완전연결계층뒤에만듭니다。

분류 계층마지막계층은분류계층입니다。이계층은소프트맥스활성화함수가각입력값에대해반환한확률을사용하여상호배타적인클래스중하나에입력값을할당하고손실을계산합니다。분류계층을만들려면classificationLayer를사용하십시오。

훈련옵션지정하기

신경망구조를정의한다음에는훈련옵션을지정합니다。个(随机梯度下降势头:모멘텀을사용한확률적경사하강법)을사용하여초기학습률0.01로신경망을훈련시킵니다。최대纪元횟수를4로설정합니다。纪元1회는전체훈련데이터세트에대한하나의완전한훈련주기를의미합니다。검데이터와검빈도를지정하여훈련중에신경망정확도를모니터링합니다。매纪元마다데이터를섞습니다。훈련데이터에대해신경망이훈련되고,훈련중에규칙적인간격으로검증데이터에대한정확도가계산됩니다。검데이터는신경망가중치를업데이트하는데사용되지않습니다。훈련진행상황플롯을켜고명령창출력을끕니다。

选项= trainingOptions(“个”...“InitialLearnRate”, 0.01,...“MaxEpochs”4...“洗牌”“every-epoch”...“ValidationData”imdsValidation,...“ValidationFrequency”30岁的...“详细”假的,...“阴谋”“训练进步”);

훈련데이터를사용하여신경망훈련시키기

에의해정의된아키텍처,훈련데이터및훈련옵션을사용하여신경망을훈련시킵니다。기본적으로trainNetwork는GPU를사용할수있으면GPU를사용하고그렇지않은경우에는CPU를사용합니다。GPU에서훈련시키려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。trainingOptions“ExecutionEnvironment”이름-값쌍通讯录수를사용하여실행환경을지정할수도있습니다。

훈련진행상황플롯에미니배치의손실및정확도와검증의손실및정확도가표시됩니다。훈련진행상황플롯에대한자세한내용은딥러닝훈련진행상황모니터링하기항목을참조하십시오。손실은교차엔트로피손실입니다。정확도는신경망이올바르게분류한상의비율입니다。

net = trainNetwork(imdsTrain,layers,options);

검상을분류하고정확도계산하기

훈련된신경망을사용하여검증데이터의레이블을예측하고최종검증정확도를계산합니다。정확도는신경망이올바르게예측하는레이블의비율입니다。여기서는예측된레이블의99%이상이검세트의참레이블과일치합니다。

YPred =分类(net,imdsValidation);YValidation = imdsValidation.Labels;精度= sum(YPred == YValidation)/numel(YValidation)
准确度= 0.9988

참고 항목

|||

관련 항목