主要内容

Parfeval.培训多个深入学习网络

此示例显示了如何使用Parfeval.在网络架构的深度上执行参数扫描,用于深度学习网络并在训练期间检索数据。

深度学习培训往往需要数小时或几天,并且寻求良好的架构可能很困难。通过并行计算,您可以加快并自动化搜索优良型号。如果您可以访问具有多个图形处理单元(GPU)的计算机,则可以在使用本地并行池的数据集的本地副本上完成此示例。如果您想使用更多资源,您可以扩展到云的深度学习培训。此示例显示了如何使用Parfeval.在云中的群集中的网络架构深度上执行参数扫描。使用Parfeval.允许您在后台训练而不阻止MATLAB,如果结果令人满意,请提前停止选项。您可以修改脚本以在任何其他参数上执行参数扫描。此外,此示例显示如何通过使用在计算期间从工人获得反馈达图

要求

在运行此示例之前,您需要配置群集并将数据上传到云。在MATLAB中,您可以直接从MATLAB桌面创建云中的群集。在这一点标签,在平行菜单,选择创建和管理群集。在集群配置文件管理器中,单击创建云集群。或者,您可以使用MathWorks云中心来创建和访问计算群集。有关更多信息,请参阅云中心入门。在此示例中,请确保将群集设置为Matlab上的默认值标签,in.平行>选择默认群集。之后,将数据上传到Amazon S3存储桶,并直接从MATLAB使用它。此示例使用已存储在Amazon S3中的CIFAR-10数据集的副本。有关说明,请参阅将深度学习数据上传到云端

从云加载数据集

使用云加载培训和测试数据集imageageAtastore.。将培训数据拆分为培训和验证集,并保留测试数据设置以从参数扫描测试最佳网络。在此示例中,您可以使用存储在Amazon S3中的CIFAR-10数据集的副本。为了确保工人可以访问云中的数据存储,请确保正确设置AWS凭据的环境变量。看将深度学习数据上传到云端

imds = imageageatastore('s3:// cifar10cloud / cifar10 /火车'......'insertumbfolders',真的,......'labelsource''foldernames');imdstest = imageageataStore('s3:// cifar10cloud / cifar10 / test'......'insertumbfolders',真的,......'labelsource''foldernames');[IMDStrain,IMDSValidation] = SpliteachLabel(IMDS,0.9);

通过创建一个通过增强图像数据列车AugmentedimageGedataStore.目的。使用随机翻译和水平反射。数据增强有助于防止网络过度接收和记忆培训图像的确切细节。

图像_ [32 32 3];PIXELRANGE = [-4 4];imageaugmenter = imagedataAugmenter(......'randxreflection',真的,......'randxtranslation',pixelrange,......'randytranslation',pixelrange);Augmentedimdstrain = AugmentedimageGedataStore(图像化,IMDstrain,......'dataaugmentation',imageaugmender,......'outputsizeMode''randcrop');

同时训练几个网络

定义培训选项。根据小型批量尺寸设置迷你批量大小并按线性缩放初始学习速率。设置验证频率,使其如此Trainnetwork.每个时代验证网络一次。

minibatchsize = 128;InitialLearnrate = 1E-1 * MINIBATCHSIZE / 256;验证频率=地板(Numel(IMDStrain.Labels)/小匹匹匹匹配);选项=培训选项('sgdm'......'minibatchsize',小匹马,......%设置迷你批量大小'verbose',错误的,......%不发送命令行输出。'italllearnrate',initiallearnrate,......%设置缩放的学习率。'L2Regularization',1e-10,......'maxepochs',30,......'洗牌''每个时代'......'vightationdata',imdsvalidation,......'验证职业',验证职权;

指定要执行参数扫描的网络架构的深度。使用并行参数扫描培训多个网络同时使用Parfeval.。使用循环迭代扫描中的不同网络架构。创建辅助功能createNetworkArchitecture在脚本的末尾,它采用输入参数来控制网络的深度并为CiFar-10创建架构。用Parfeval.卸载所执行的计算Trainnetwork.到群集的工人。Parfeval.返回未来变量以在完成计算时持有培训的网络和培训信息。

NetDepths = 1:4;为了idx = 1:numel(netdepths)networksfuture(idx)= parfeval(@ trainnetwork,2,......AugmentedImdstrain,CreateNetWorkArchitecture(NetDepths(IDX)),选项);结尾
使用“MyCluster”配置文件启动并行池(Parpool)...连接到并行池(工人数量:4)。

Parfeval.不阻止MATLAB,这意味着您可以继续执行命令。在这种情况下,通过使用获取培训的网络及其培训信息fetchOutputs.网络运行。这fetchOutputs.功能等待,直到未来的变量完成。

[训练网络,TrainingInfo] = fetchOutputs(网络文件);

通过访问获得网络的最终验证精度TrainingInfo.结构体。

精度= [trainingInfo.finalValidationAccuracy]
精度=1×4.72.5600 77.2600 79.4000 78.6800

在准确性方面选择最佳网络。测试其对测试数据集的性能。

[〜,i] = max(准确性);BestNetwork =训练网络(I(1));ypredictict =分类(bestnetwork,imdstest);精度= sum(ypredicted == imdstest.labels)/ numel(imdstest.labels)
精度= 0.7840.

计算测试数据的混淆矩阵。

数字('单位''标准化''位置',[0.2 0.2 0.4 0.4]);ConfusionChart(IMDStest.Labels,Y预期,'rowsmumary''行标准化''placeSummary''列 - 归一化');

在培训期间发送反馈数据

准备和初始化显示每个工人培训进度的地块。用动画线为了显示更改数据的便捷方式。

f =图;F.visible =真;为了i = 1:4子图(2,2,i)xlabel('迭代');ylabel('训练准确性');行(i)=动画线;结尾

通过使用将培训进度数据从工人发送到客户达图,然后绘制数据。每当工人通过使用时,每次培训进度反馈时更新图after。参数选择包含有关工人的信息,培训迭代和培训准确性。

d = parallel.pool.dataqueue;sulteAp(d,@(选择)updateplot(行,opts {:}));

指定要执行参数扫描的网络架构的深度,并执行并行参数扫描使用Parfeval.。允许工人通过将脚本添加到当前池中作为附加文件来访问此脚本中的任何辅助功能。定义培训选项中的输出功能,以将工人从工人发送到客户端。培训选项取决于工作人员的索引,必须包含在内部为了环形。

NetDepths = 1:4;addattachedfiles(gcp,mfilename);为了IDX = 1:numel(netdepths)minibatchsize = 128;InitialLearnrate = 1E-1 * MINIBATCHSIZE / 256;%根据迷你批量大小缩放学习率。验证频率=地板(Numel(IMDStrain.Labels)/小匹匹匹匹配);选项=培训选项('sgdm'......'outputfcn',@(州)sendtrainingprogress(d,idx,state),......%设置输出功能以向客户端发送中间结果。'minibatchsize',小匹马,......%在扫描中设置相应的小匹匹匹配。'verbose',错误的,......%不发送命令行输出。'italllearnrate',initiallearnrate,......%设置缩放的学习率。'L2Regularization',1e-10,......'maxepochs',30,......'洗牌''每个时代'......'vightationdata',imdsvalidation,......'验证职业',验证职权;NetworkSfuture(IDX)= Parfeval(@ Trainnetwork,2,......AugmentedImdstrain,CreateNetWorkArchitecture(NetDepths(IDX)),选项);结尾

Parfeval.调用Trainnetwork.在集群的工人上。计算在后台发生,因此您可以继续在MATLAB中工作。如果你想停止一个Parfeval.计算,你可以打电话取消在其相应的未来变量上。例如,如果您观察到网络表现不佳,则可以取消其未来。当您这样做时,下一个排队的将来变量开始其计算。

在这种情况下,通过调用培训的网络和他们的培训信息来获取培训的网络及其培训信息fetchOutputs.关于未来的变量。

[训练网络,TrainingInfo] = fetchOutputs(网络文件);

获取每个网络的最终验证精度。

精度= [trainingInfo.finalValidationAccuracy]
精度=1×4.72.9200 77.4800 76.9200 77.0400

辅助功能

为具有函数的CIFAR-10数据集的网络架构定义,并使用输入参数来调整网络的深度。为简化代码,请使用卷积卷积的卷积块。汇集层向下采样空间尺寸。

功能图层= createNetworkArchitecture(NetDepth)图像中= [32 32 3];netwidth = round(16 / sqrt(netdepth));%NetWidth控制卷积块中的过滤器数量图层= [imageInputLayer(象限化)卷积块(NetWidth,NetDepth)MaxPooling2Dlayer(2,'走吧',2)卷积器(2 * netwidth,netdepth)maxpooling2dlayer(2,'走吧',2)卷积块(4 * NetWidth,NetDepth)普通Pooling2dlayer(8)全连接列(10)SoftmaxLayer分类层];结尾

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

功能图层=卷积块(NumFilters,NumConvlayers)图层= [卷积2dlayer(3,numfilters,'填充''相同的')BatchnormalizationLayer Ruilulayer];图层= Repmat(图层,NumConvlayers,1);结尾

定义一个函数,以通过的方式向客户发送培训进度达图

功能sendtrainingprogress(d,Idx,Info)如果info.state ==.“迭代”发送(d,{idx,info.teration,info.trainingAtharCuracy});结尾结尾

定义更新功能以在工作者发送中间结果时更新绘图。

功能updateplot(行,idx,iter,acc)addpoints(行(idx),iter,acc);drawn限制nocallbacks.结尾

也可以看看

|||(并行计算工具箱)|(并行计算工具箱)

相关话题