列车网络在云中使用自动并行的支持金宝app
这个例子展示了如何使用MATLAB训练卷积神经网络自动支持并行训练。金宝app深度学习训练往往要花上数小时或数天。使用并行计算,可以加快训练使用多个图形处理单元(gpu)在本地或在集群的云。如果你访问一个有多个gpu的机器,你可以完成这个示例数据的本地副本。如果你想使用更多的资源,那么您可以扩大到云深学习培训。并行训练,了解更多关于你的选项并行扩展深度学习,在gpu上,在云端。这个例子将指导您完成训练的步骤深入学习网络在集群在云中使用MATLAB自动并行的支持。金宝app
需求
在运行示例之前,您需要配置一个集群和上传数据到云上。在MATLAB中,您可以在云中创建集群直接从MATLAB桌面。在家选项卡,环境区域,选择平行>创建和管理集群。在集群配置文件管理器,单击创建云计算集群。或者,您可以使用MathWorks云中心创建和访问计算集群。有关更多信息,请参见开始使用云计算中心。之后,上传数据到一个Amazon S3 bucket和直接从MATLAB访问它。这个示例使用的副本CIFAR-10已经存储在Amazon S3数据集。说明,请参阅在AWS与深度学习数据工作。
设置集群
选择您的云团,并开始一个平行的池,工人的数量数量设置的gpu集群。如果您指定更多的工人比gpu,然后剩下的工人闲置。
numberOfGPUs = 4;集群= parcluster (“MyClusterInTheCloud”);池= parpool(集群,numberOfGPUs);
开始平行池(parpool)使用“MyClusterInTheCloud”概要文件…连接到平行池4工人。
如果你不指定集群,集群配置文件是默认使用。检查默认集群在MATLAB上的形象家选项卡,环境区域,选择平行>创建和管理集群。
加载数据集从云端
负荷训练和测试数据集从云端imageDatastore
。在本例中,您使用的一个副本CIFAR-10存储在Amazon S3数据集。确保人员访问数据存储在云端,确保AWS凭证正确设置环境变量。看到在AWS与深度学习数据工作。
imdsTrain = imageDatastore (“s3: / / cifar10cloud cifar10 /火车”,…IncludeSubfolders = true,…LabelSource =“foldernames”);imdsTest = imageDatastore (“s3: / / cifar10cloud cifar10 /测试”,…IncludeSubfolders = true,…LabelSource =“foldernames”);
培养和增强图像数据通过建立一个网络augmentedImageDatastore
对象。使用随机翻译和水平的反映。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。
图象尺寸= [32 32 3];pixelRange = 4 [4];imageAugmenter = imageDataAugmenter (…RandXReflection = true,…RandXTranslation = pixelRange,…RandYTranslation = pixelRange);imdsTrain augmentedImdsTrain = augmentedImageDatastore(图象尺寸,…DataAugmentation = imageAugmenter,…OutputSizeMode =“randcrop”);
定义网络结构和训练选项
CIFAR-10数据集定义一个网络体系结构。为了简化代码,使用卷积卷积模块输入。支持函数金宝appconvolutionalBlock
提供的这个例子并创建重复的层块,每个包含一个卷积层,一批标准化层,和一个ReLU层。池层downsample空间维度。
blockDepth = 4;netWidth = 32;层= [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,增加可用的计算资源。扩大mini-batch大小与GPU的工作负载的数量在每个GPU根据mini-batch学习速率常数和规模大小。
miniBatchSize = 256 * numberOfGPUs;initialLearnRate = 1 e 1 * miniBatchSize / 256;
指定培训选项:
训练一个网络使用个解决50时代。
列车网络并行使用当前集群通过设置执行环境
平行
。使用学习速率安排学习速率随着训练的进行。
使用L2正规化,防止过度拟合。
设置mini-batch大小和洗牌数据每一时代。
验证网络使用验证数据。
打开培训进展阴谋获得视觉反馈在训练。
禁用详细输出。
选择= trainingOptions (“个”,…MaxEpochs = 50,…ExecutionEnvironment =“平行”,…InitialLearnRate = InitialLearnRate,…LearnRateSchedule =“分段”,…LearnRateDropFactor = 0.1,…LearnRateDropPeriod = 45,…L2Regularization = 1平台以及,…MiniBatchSize = MiniBatchSize,…洗牌=“every-epoch”,…ValidationData = imdsTest,…ValidationFrequency =地板(元素个数(imdsTrain.Files) / miniBatchSize),…情节=“训练进步”,…Verbose = false);
列车网络,用于分类
列车网络集群中。在培训期间,情节显示进展。
网= trainNetwork (augmentedImdsTrain层,选项);
使用经过训练的网络分类测试图像在本地机器上,然后将标签比较预测实际的标签。
YPredicted =分类(净,imdsTest);精度= (YPredicted = = imdsTest.Labels) /元素个数之和(imdsTest.Labels)
精度= 0.8968
近平行池如果您不打算使用一遍。
删除(池)
金宝app支持功能
卷积块功能
的convolutionalBlock
函数创建numConvBlocks
卷积的块,每个包含一个二维卷积层,一批normmalization层,和一个ReLU层。每个二维卷积层numFilters
3 x3的过滤器。
函数层= convolutionalBlock (numFilters numConvBlocks)层= [convolution2dLayer (3 numFilters填充=“相同”)batchNormalizationLayer reluLayer];层= repmat(层numConvBlocks 1);结束
另请参阅
trainNetwork
|trainingOptions
|imageDatastore