主要内容

使用自动多gpu支持训练网络金宝app

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

需求

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

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

加载数据集

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

imdsTrain = imageDatastore (locationCifar10Train,...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);imdsTest = imageDatastore (locationCifar10Test,...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

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

imageSize = [32 32 3];pixelRange = [-4 4];imageAugmenter = imageDataAugmenter (...“RandXReflection”,真的,...“RandXTranslation”pixelRange,...“RandYTranslation”, pixelRange);imdsTrain augmentedImdsTrain = augmentedImageDatastore(图象尺寸,...“DataAugmentation”, imageAugmenter);

定义网络架构和培训选项

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

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

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

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

训练网络和分类使用

培训网络。在训练期间,情节显示了进展。

净= trainNetwork (augmentedImdsTrain、层、期权)
使用“local”配置文件启动并行池(parpool)…连接到并行池(工作人员数量:2)。

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

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

YPredicted =分类(净,imdsTest);精度= sum(YPredicted == imdsTest.Labels)/numel(imdsTest.Labels)
精度= 0.8779

自动多gpu支持可以利用多个gpu加速网金宝app络训练。下图显示了在Linux机器上使用4个NVIDIA©TITAN Xp gpu时,随着gpu数量的增加,总的训练时间的加速。

定义辅助函数

定义一个函数在网络架构中创建一个卷积块。

函数layers =[卷积2dlayer (3,numFilters, numConvLayers)] layer =[卷积2dlayer (3,numFilters,“填充”“相同”) batchNormalizationLayer reluLayer];层= repmat(层numConvLayers 1);结束

另请参阅

||

相关的话题