主要内容

자동병렬지원을사용하여클라우드의신경망훈련시키기

이예제에서는병렬훈련에대한MATLAB자동지원을사용하여컨벌루션신경망을훈련시키는방법을보여줍니다。딥러닝훈련에는종종몇시간이나며칠이소됩니다。병렬연산을사용하면로컬에서또는클라우드에있는클러스터에서여러개의GPU(그래픽처리장치)를사용하여훈련속도를높일수있습니다。복수의GPU가장착된컴퓨터를사용하는경우에는이예제를데이터의로컬복사본에대해실행할수있습니다。리소스를더많이사용하고싶다면딥러닝훈련을클라우드로확장할수있습니다。병렬훈련옵션에대해알아보려면并行、gpu和云中扩展深度学习항목을참조하십시오。이예제에서는MATLAB자동병렬지원을사용하여클라우드에있는클러스터에서딥러닝신경망을훈련시키는방법을보여줍니다。

구사항

이예제를실행하려면먼저클러스터를구성하고데이터를클라우드로업로드해야합니다。Matlab에서는Matlab데스크탑에서직접클라우드에클러스터를만들수있습니다。탭의병렬연산메뉴에서클러스터생성및관리를선택합니다。클러스터프로파일관리자에서클라우드클러스터생성을클릭합니다。또는MathWorks云中心를사용하여계산클러스터를만들고액세스할수도있습니다。자세한내용은开始使用云中心를참조하십시오。그런다음Amazon S3버킷으로데이터를업로드하면MATLAB에서직접액세스할수있습니다。이예제에서는기존에Amazon S3에저장되어있는CIFAR-10데이터세트복사본을사용합니다。자세한지침은딥러닝데이터를클라우드로업로드하기항목을참조하십시오。

병렬풀설정하기

클러스터에서병렬풀을시작하고워커의개수를클러스터상의gpu개수로설정합니다。워커의개수를gpu의개수보다많이지정하면나머지워커들은유휴상태가됩니다。이예제에서는사용하는클러스터가디폴트클러스터프로파일로설정되어있다고가정합니다。디폴트클러스터프로파일은matlab탭의병렬연산>디폴트클러스터선택에서확하십시오。

numberOfWorkers = 8;parpool (numberOfWorkers);
使用' myclusterincloud '配置文件启动并行池(parpool)…连接8个工人。

클라우드에서데이터세트불러오기

imageDatastore를사용하여클라우드에서훈련데이터세트와테스트데이터세트를불러옵니다。이예제에서는Amazon S3에저장되어있는CIFAR-10데이터세트복사본을사용합니다。워커가클라우드의데이터저장소에액세스할수있도록하려면AWS자격증명의환경변수가올바르게설정되었는지확인하십시오。딥러닝데이터를클라우드로업로드하기항목을참조하십시오。

imdsTrain = imageDatastore(s3: / / cifar10cloud / cifar10 /火车'...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);imdsTest = imageDatastore(s3: / / cifar10cloud / cifar10 /测试”...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

augmentedImageDatastore객체를만들어서대상데이터로신경망을훈련시킵니다。무작위평행이동및가로반사를사용합니다。데이터증대는신경망이과적합되는것을방지하고훈련영상의정확한세부정보가기억되지않도록하는데도움이됩니다。

imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter(...“RandXReflection”,真的,...“RandXTranslation”pixelRange,...“RandYTranslation”, pixelRange);augmentedImdsTrain = augmentedimagedastore (imageSize,imdsTrain,...“DataAugmentation”imageAugmenter,...“OutputSizeMode”“randcrop”);

신경망아키텍처와훈련옵션정의하기

Cifar-10데이터세트에대해신경망아키텍처를정의합니다。코드를단순화하려면입력값을컨벌루션하는컨벌루션블록을사용하십시오。풀링계층은공간차원을다운샘플링합니다。

blockDepth = 4;% blockDepth控制卷积块的深度netWidth = 32;% netWidth控制卷积块中的过滤器数量图层= [imageInputLayer(imageSize) convolutionalBlock(netWidth,blockDepth) maxPooling2dLayer(2,“步”,2) convolutionalBlock(2*netWidth,blockDepth) maxPooling2dLayer(2,“步”,2) convolutionalBlock(4*netWidth,blockDepth) averagePooling2dLayer(8) fullyConnectedLayer(10) softmaxLayer classificationLayer];

훈련옵션을정의합니다。실행환경을平行로설정하여,현재클러스터를사용하여신경망을병렬로훈련시킵니다。복수의gpu를사용하면사용가능한연산리소스가늘어납니다。미니배치크기를GPU개수로설정하여각GPU상의워크로드를일정하게유지합니다。미니배치크기에따라학습률의크기를조정합니다。훈련이진행됨에따라학습률을떨어뜨리는학습률일정을사용합니다。훈련중에시각적피드백을볼수있도록훈련진행상황플롯을켭니다。

miniBatchSize = 256 * numberOfWorkers;initialLearnRate = 1e-1 * miniBatchSize/256;选项= trainingOptions(“个”...“ExecutionEnvironment”“平行”...打开自动并行支持。金宝app“InitialLearnRate”initialLearnRate,...%设置初始学习率。“MiniBatchSize”miniBatchSize,...设置MiniBatchSize。“详细”假的,...不发送命令行输出。“阴谋”“训练进步”...打开训练进度图。“L2Regularization”1平台以及...“MaxEpochs”, 50岁,...“洗牌”“every-epoch”...“ValidationData”imdsTest,...“ValidationFrequency”、地板(元素个数(imdsTrain.Files) / miniBatchSize),...“LearnRateSchedule”“分段”...“LearnRateDropFactor”, 0.1,...“LearnRateDropPeriod”, 45岁);

신경망을훈련시키고분류에사용하기

클러스터에서신경망을훈련시킵니다。훈련중에플롯에진행상황이@ @시됩니다。

net = trainNetwork(augmentedImdsTrain,layers,options)

net = SeriesNetwork with properties: Layers: [43×1 nnet.cnn.layer.Layer]

훈련된신경망을사용하여로컬컴퓨터에서테스트영상을분류하여이신경망의정확도를확인합니다。그런다음예측된레이블을실제레이블과비교합니다。

ypredict = category (net,imdsTest);accuracy = sum(ypredict == imdsTest.Labels)/numel(imdsTest.Labels)

헬퍼함수정의하기

신경망아키텍처에서컨벌루션블록을만드는함수를정의합니다。

函数layers = [convolution2dLayer(3,numFilters, numConvLayers)“填充”“相同”) batchNormalizationLayer reluLayer;layers = repmat(layers,numConvLayers,1);结束

참고 항목

||

관련 항목