主要内容

使用自动多gpu支持训练网络万博1manbetx

这个示例展示了如何使用自动并行支持在本地机器上使用多个gpu进行深度学习训练。万博1manbetx训练深度学习网络通常需要数小时或数天。使用并行计算,您可以使用多个gpu加速训练。要了解更多关于并行训练的选项,请参见在GPU和云中并行扩展深度学习

需求

在运行此示例之前,必须将CIFAR-10数据集下载到本地机器。下面的代码将数据集下载到当前目录。如果您已经有了CIFAR-10的本地副本,那么您可以跳过这一节。

目录=pwd;[locationCifar10Train,locationCifar10Test]=下载CIFARTOFolders(目录);
正在下载CIFAR-10数据集…完成。正在将CIFAR-10复制到文件夹…完成。

加载数据集

使用。加载训练和测试数据集imageDatastore在以下代码中,确保数据存储的位置指向本地计算机中的CIFAR-10。

imdsTrain=图像数据存储(位置CIFAR10列车,...“IncludeSubfolders”符合事实的...“LabelSource”,“foldernames”); imdsTest=图像数据存储(位置CIFAR10Test,...“IncludeSubfolders”符合事实的...“LabelSource”,“foldernames”);

为了用增强的图像数据训练网络,创建一个增强图像数据存储对象。使用随机平移和水平反射。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。

imageSize=[32 32 3];pixelRange=[-4];imageAugmenter=imageDataAugmenter(...“RandXReflection”符合事实的...“随机翻译”,像素范围,...“兰迪翻译”, pixelRange);imdsTrain augmentedImdsTrain = augmentedImageDatastore(图象尺寸,...“数据增强”图像增强仪);

定义网络体系结构和培训选项

为CIFAR-10数据集定义一个网络架构。为了简化代码,可以使用卷积块对输入进行卷积。池化层向下采样空间维度。

块深度=4;%blockDepth控制卷积块的深度。netWidth=32;% netWidth控制卷积块中过滤器的数量。[imageInputLayer(imageSize)卷积块(netWidth,blockDepth) maxPooling2dLayer(2,“大步走”,2)卷积块(2*netWidth,blockDepth)MaxPoolig2dlayer(2,“大步走”,2) convolutionalBlock(4*netWidth,blockDepth) averageepooling2dlayer (8) fulllyconnectedlayer (10) softmaxLayer classificationLayer;

定义培训选项。通过将执行环境设置为'多gpu'.当您使用多个gpu时,您将增加可用的计算资源。根据GPU的数量扩大迷你批处理的大小,以保持每个GPU上的工作负载不变。本例中,gpu数量为2。根据小批量的大小缩放学习率。使用学习率计划,随着训练的进行降低学习率。在训练过程中打开训练进度图,获取视觉反馈。

numGPUs=2;miniBatchSize=256*numGPUs;initialLearnRate=1e-1*miniBatchSize/256;选项=培训选项(“sgdm”,...“执行环境”,“多gpu”,...%启用自动多gpu支持。万博1manbetx“初始学习率”,initialLearnRate,...%设置初始学习速率。“MiniBatchSize”,小批量,...%设置MiniBatchSize。“冗长”假的,...%不发送命令行输出。“情节”,“培训进度”,...%打开“训练进度”绘图。“L2规范化”,1e-10,...“MaxEpochs”,60,...“洗牌”,“every-epoch”,...“ValidationData”,imdsTest,...“ValidationFrequency”、地板(元素个数(imdsTrain.Files) / miniBatchSize),...“LearnRateSchedule”,“分段”,...“LearnRateDropFactor”,0.1,...“LearnRateDropPeriod”, 50);

列车网络及其分类使用

训练网络。训练期间,绘图显示进度。

net=列车网络(增强、层、选项)
正在使用“本地”配置文件启动并行池(parpool)。。。已连接到并行池(工作线程数:2)。

net=具有以下属性的系列网络:层:[43×1 nnet.cnn.layer.layer]

通过使用经过训练的网络对本地机器上的测试图像进行分类,确定网络的准确性。然后比较预测的标签和实际的标签。

YPredicted=classify(net,imdsTest);accurity=sum(YPredicted==imdsTest.Labels)/numel(imdsTest.Labels)
精度= 0.8779

自动多GPU支持可以利用多个GPU加快网万博1manbetx络培训。下图显示了在配备四个NVIDIA©TITAN Xp GPU的Linux机器上,随着GPU数量的增加,整体培训时间的加速。

定义辅助函数

定义在网络体系结构中创建卷积块的函数。

函数层=卷积块(numFilters,numConvLayers)层=[卷积2dlayer(3,numFilters,“填充”,“相同”)batchNormalizationLayer reluLayer];层=repmat(层,numConvLayers,1);终止

另见

||

相关的话题