主要内容

使用自动多GPU支持的列车网络

此示例显示了如何使用本地计算机上的多个GPU进行使用自动并行支持的深度学习培训。

培训深度学习网络通常需要数小时或数天。通过并行计算,您可以使用多个GPU加快训练速度。要了解有关并行训练选项的更多信息,请参阅在并行、GPU和云中扩大深度学习.

要求

在运行此示例之前,必须将CIFAR-10数据集下载到本地计算机。要下载CIFAR-10数据集,请使用下载CIFARTo文件夹函数,作为支持文件附加到此示例。要访问此文件,请将示例作为实时脚本打开。以下代码将数据集下载到当前目录。如果您已经有CIFAR-10的本地副本,则可以跳过此部分。

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

加载数据集

使用图像数据存储对象。在以下代码中,确保数据存储的位置指向本地计算机中的CIFAR-10。

imdsTrain=图像数据存储(locationCifar10Train,...IncludeSubfolders=true,...标签源=“文件夹名”);imdsTest=图像数据存储(locationCifar10Test,...IncludeSubfolders=true,...标签源=“文件夹名”);

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

imageSize=[32 32 3];像素范围=[-4 4];imageAugmenter=图像数据增强器(...RandXReflection=真,...RandXTranslation=像素范围,...RandYTranslation=像素范围);augmentedImdsTrain=增强的图像数据存储(imageSize,imdsTrain,...DataAugmentation=imageAugmenter);

定义网络架构和培训选项

定义CIFAR-10数据集的网络体系结构。为了简化代码,使用卷积块对输入进行卷积。池层降低了空间维度的采样。

块深度=4;%blockDepth控制卷积块的深度。净宽度=32;%netWidth控制卷积块中过滤器的数量。层=[imageInputLayer(imageSize)卷积块(netWidth,blockDepth)maxPooling2dLayer(2,步幅=2)卷积块(2*netWidth,blockDepth)maxPooling2dLayer(2,步幅=2)卷积块(4*netWidth,blockDepth)平均池2层(8)全连接层(10)softmaxLayer];

指定培训选项。

  • 通过将执行环境设置为“多gpu“。使用多个GPU时,会增加可用的计算资源。根据GPU的数量扩大迷你背带的大小,以保持每个GPU上的工作负载不变。在本例中,GPU的数量是两个。根据迷你背带大小调整学习速度。在GPU上进行培训需要Parallel Computing Toolbox™许可证和受支持的GPU设备。有关支持的设备的信息,请参阅GPU计算要求(并行计算工具箱).

  • 随着培训的进行,使用学习率时间表来降低学习率。

  • 打开培训进度图,以在培训期间获得视觉反馈。

numGPU=gpuDeviceCount(“可用”)
numGPU=4个
miniBatchSize=256*个GPU;initialLearnRate=1e-1*miniBatchSize/256;options=培训选项(“sgdm”,...执行环境=“多gpu”,...%启用自动多gpu支持。InitialLearnRate=初始学习速率,...%设置初始学习速率。MiniBatchSize=迷你批次大小,...%设置MiniBatchSize。详细=错误,...%不发送命令行输出。绘图=“培训进度”,...%打开培训进度图。指标=“准确性”,...L2正则化=1e-10,...MaxEpochs=60,...随机播放=“每个人”,...验证数据=imdsTest,...ValidationFrequency=楼层(numel(imdsTrain.Files)/miniBatchSize),...学习率计划=“分段”,...学习率下降系数=0.1,...LearnRateDropPeriod=50);

列车网络和分类使用

使用列车网络功能。对于分类,使用交叉熵损失。

net=列车网络(增强的ImdsTrain,层,“交叉熵”,选项);

对测试图像进行分类。要使用多个观测值进行预测,请使用小批量预测功能。要将预测分数转换为标签,请使用分数2标签功能。这个小批量预测功能自动使用GPU(如果有)。否则,该函数将使用CPU。

classes=类别(imdsTest.Labels);分数=minibatchpredict(net,imdsTest);Y=分数2标签(分数、等级);

确定网络的准确性。

准确性=总和(Y==imdsTest.Labels)/numel(imdsTest.Nabels)
精度=0.8879

自动多GPU支持可以利用多个GPU加快网络训练。下图显示了带有四个NVIDIA©TITAN Xp GPU的Linux机器上GPU数量在总训练时间内的加速。

定义助手函数

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

功能layers=卷积块(numFilters,numConvLayers)层=[卷积2dLayer(3,numFilters,Padding=“相同”)批处理规范化层reluLayer];layers=repmat(层,numConvLayers,1);结束

另请参见

|||

相关主题