列车网络的使用自动Multi-GPU支持万博1manbetx
这个例子展示了如何使用多个gpu深度学习培训本地机器上使用自动并行的支持。万博1manbetx
培训深入学习网络往往需要几小时或几天。使用并行计算,可以使用多个gpu加速训练。了解更多关于选择并行训练,明白了并行扩展深度学习,在gpu上,在云端。
需求
你可以运行这个例子之前,您必须CIFAR-10数据集下载到本地机器上。下载CIFAR-10数据集,使用downloadCIFARToFolders
功能,附加到这个例子作为支持文件。万博1manbetx要访问这个文件,打开生活的脚本示例。下面的代码下载的数据设置为当前目录。如果你已经有一个本地副本CIFAR-10,那么您可以跳过这一节。
目录= pwd;[locationCifar10Train, locationCifar10Test] = downloadCIFARToFolders(目录);
下载CIFAR-10数据集……。CIFAR-10复制到文件夹……。
加载数据集
负荷训练和测试使用一个数据集imageDatastore
对象。在以下代码中,确保数据存储的位置指向CIFAR-10在你的本地机器上。
imdsTrain = imageDatastore (locationCifar10Train,…IncludeSubfolders = true,…LabelSource =“foldernames”);imdsTest = imageDatastore (locationCifar10Test,…IncludeSubfolders = true,…LabelSource =“foldernames”);
与增强图像数据训练网络,创建一个augmentedImageDatastore
对象。使用随机翻译和水平的反映。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。
图象尺寸= [32 32 3];pixelRange = 4 [4];imageAugmenter = imageDataAugmenter (…RandXReflection = true,…RandXTranslation = pixelRange,…RandYTranslation = pixelRange);imdsTrain augmentedImdsTrain = augmentedImageDatastore(图象尺寸,…DataAugmentation = imageAugmenter);
定义网络结构和训练选项
CIFAR-10数据集定义一个网络体系结构。为了简化代码,使用卷积卷积模块输入。池层downsample空间维度。
blockDepth = 4;% blockDepth控制一个回旋的块的深度。netWidth = 32;% netWidth控制过滤器在一个回旋的块的数量。层= [imageInputLayer(图象尺寸)convolutionalBlock (netWidth blockDepth) maxPooling2dLayer(2步= 2)convolutionalBlock (2 * netWidth blockDepth) maxPooling2dLayer(2步= 2)convolutionalBlock (4 * netWidth blockDepth) averagePooling2dLayer (8) fullyConnectedLayer (10) softmaxLayer classificationLayer);
定义培训选项。火车与多个gpu并行网络通过设置执行环境multi-gpu
。当你使用多个gpu,增加可用的计算资源。扩大mini-batch大小与GPU的数量保持每个GPU的工作负载恒定。在这个例子中,gpu的数量是4。根据mini-batch学习速率的大小。使用学习速率安排学习速率随着训练的进行。打开培训进展阴谋获得视觉反馈在训练。
numGPUs = gpuDeviceCount (“可用”)
numGPUs = 4
miniBatchSize = 256 * numGPUs;initialLearnRate = 1 e 1 * miniBatchSize / 256;选择= trainingOptions (“个”,…ExecutionEnvironment =“multi-gpu”,…%打开自动multi-gpu支持。万博1manbetxInitialLearnRate = InitialLearnRate,…%设置初始学习速率。MiniBatchSize = MiniBatchSize,…%设置MiniBatchSize。Verbose = false,…%不发送命令行输出。情节=“训练进步”,…%的培训进展阴谋。L2Regularization = 1平台以及,…MaxEpochs = 60,…洗牌=“every-epoch”,…ValidationData = imdsTest,…ValidationFrequency =地板(元素个数(imdsTrain.Files) / miniBatchSize),…LearnRateSchedule =“分段”,…LearnRateDropFactor = 0.1,…LearnRateDropPeriod = 50);
列车网络,用于分类
培训网络。在培训期间,情节显示进展。
净= trainNetwork (augmentedImdsTrain、层、期权)
开始平行池(parpool)使用过程的概要文件…连接到平行池(工人数量:4)。
网= SeriesNetwork属性:层:[43×1 nnet.cnn.layer.Layer] InputNames: {“imageinput”} OutputNames: {“classoutput”}
确定网络通过使用训练网络的准确性对本地机器上测试图像进行分类。然后比较预测标签实际标签。
YPredicted =分类(净,imdsTest);精度= (YPredicted = = imdsTest.Labels) /元素个数之和(imdsTest.Labels)
精度= 0.8972
自动multi-GPU支持可以加快网络训万博1manbetx练利用gpu。下面的图显示了加速整体培训时间与gpu的数量在Linux机器上有四个NVIDIA gpu©泰坦Xp。
定义辅助函数
定义一个函数创建一个卷积块网络体系结构。
函数层= convolutionalBlock (numFilters numConvLayers)层= [convolution2dLayer (3 numFilters填充=“相同”)batchNormalizationLayer reluLayer];层= repmat(层numConvLayers 1);结束
另请参阅
trainNetwork
|trainingOptions
|imageDatastore