主要内容

通过使用贝叶斯优化调整实验Hyperparameters

自从R2020b

这个例子展示了如何使用贝叶斯优化实验管理器找到最优网络hyperparameters和卷积神经网络训练选项。贝叶斯优化提供了一种替代方法策略全面hyperparameters实验。每个hyperparameter你指定一个范围的值并选择优化的指标,和实验管理器搜索hyperparameters优化你的选择指标的结合。贝叶斯优化需要统计和机器学习的工具箱™。

在本例中,您从CIFAR-10训练一个网络分类图像数据集。实验使用贝叶斯优化找到hyperparameters最小化一个自定义度量函数的组合。hyperparameters包括训练算法的选择,以及网络体系结构本身的参数。自定义指标函数决定了在随机选择的测试集分类错误。有关定义定制指标在实验管理器的更多信息,见通过使用度量函数评估深度学习实验

或者,你可以找到最优hyperparameter值编程方式通过调用bayesopt函数。有关更多信息,请参见使用贝叶斯优化深度学习

开放实验

首先,打开示例。实验管理器加载一个预配置实验的项目,你可以检查和运行。开放实验,实验的浏览器面板,双击BayesOptExperiment

内置训练实验由一个描述,hyperparameters表,设置函数,和一组度量函数对实验的结果进行评估。实验,使用贝叶斯优化包括额外的选项来限制实验的持续时间。有关更多信息,请参见配置内置的训练实验

描述字段包含的文本描述的实验。对于这个例子,描述是:

找到最优hyperparameters和卷积神经网络训练选项。Hyperparamters确定网络部分深度,最初的学习速率,随机梯度下降势头,L2正规化的力量。

Hyperparameters部分指定策略和hyperparameter选项用于实验。对于每个hyperparameter,您可以指定这些选项:

  • 范围——输入一个双元素向量给出了下界和上界的一个真正的或整数值hyperparameter,或一个字符串数组或单元阵列直言hyperparameter可能值的列表。

  • 类型——选择真正的对一个实值hyperparameter,整数为一个整数值hyperparameter或分类直言hyperparameter。

  • 变换——选择没有一个使用没有改变日志使用对数变换。当您选择日志,hyperparameter值必须是积极的。这个设置,贝叶斯优化算法模型hyperparameter对数刻度。

当您运行实验,实验管理器搜索hyperparameters的最佳组合。每个实验在实验中使用的新组合hyperparameter值基于前面试验的结果。这个示例使用这些hyperparameters:

  • SectionDepth这个参数控制网络的深度。在网络层的总数9 * SectionDepth + 7。在实验中设置函数,卷积过滤器在每一层的数量成正比1 /√(SectionDepth),所以参数的数量和所需的每个迭代的计算量为不同部分的深度大致相同。

  • InitialLearnRate——如果学习速率太低,那么培训需要很长时间。如果学习速率过高,那么训练可以达到一个理想的结果或发散的。最好的学习速率可以依赖你的数据以及网络培训。

  • 动力——随机梯度下降势头增加惯性参数更新通过当前更新包含在前面的迭代更新的贡献成正比。惯性效应导致平滑参数更新和减少固有的噪声随机梯度下降法。

  • L2Regularization——用L2正规化,防止过度拟合。搜索正则化力量的空间找到一个好的价值。数据增加和批处理标准化有助于规范网络。

贝叶斯优化选项实验期间,您可以指定输入的最长时间(以秒为单位)和试验运行的最大数量。最好使用贝叶斯优化的力量,进行至少30目标函数评价。

设置函数部分指定配置训练数据的功能,网络体系结构,实验和培训选项。在MATLAB®编辑器打开这个功能,点击编辑。函数的代码也出现在设置函数。setup函数的输入是一个结构从hyperparameter表与字段。函数返回三个输出,训练一个网络用于图像分类问题。在这个例子中,setup函数这些部分:

  • 负荷训练数据从CIFAR-10下载和提取图像和标签数据集,数据集是大约175 MB。根据您的网络连接,下载过程可能需要一些时间。训练数据,这个例子创建了一个augmentedImageDatastore通过应用随机翻译和水平的反映。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。启用网络验证,5000例使用图像没有增加。这个数据集的更多信息,请参阅图像数据集

datadir = tempdir;downloadCIFARData (datadir);[XTrain、YTrain XTest,欧美]= loadCIFARData (datadir);idx = randperm(元素个数(欧美),5000);XValidation = XTest (:,:,:, idx);YValidation =欧美(idx);图象尺寸= [32 32 3];pixelRange = 4 [4];imageAugmenter = imageDataAugmenter (RandXReflection = true,RandXTranslation = pixelRange,RandYTranslation = pixelRange);augimdsTrain = augmentedImageDatastore(图象尺寸、XTrain YTrain,DataAugmentation = imageAugmenter);
  • 定义网络体系结构定义了建筑的卷积神经网络深度学习分类。在本例中,生成的网络培训有三个街区helper函数convBlock。查看这个函数的代码,看看创建块卷积层。每个块包含SectionDepth相同的卷积层。每个卷积层是紧随其后的是一批归一化层和ReLU层。卷积层增加了填充,这样他们的空间输出尺寸总是一样的输入的大小。之间的街区,马克斯池层downsample空间维度的两倍。确保所需的计算在每一个卷积层是大致相同的,过滤器的数量增加了两倍从一个部分。过滤器的数量在每一个卷积层成正比1 /√(SectionDepth),这样的不同深度网络有大约相同数量的参数和要求每迭代相同数量的计算。

numClasses =元素个数(独特(YTrain));numF =轮(16 /√(params.SectionDepth));层= [imageInputLayer(图象尺寸)convBlock (3 numF params.SectionDepth) maxPooling2dLayer(3步= 2,填充=“相同”)convBlock (3 2 * numF params.SectionDepth) maxPooling2dLayer(3步= 2填充=“相同”)convBlock (3、4 * numF params.SectionDepth) averagePooling2dLayer (8) fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];
  • 指定培训选项定义了一个trainingOptions实验对象使用培训选项的值InitialLearnRate,动力,L2Regularization由贝叶斯优化算法生成。列车网络的例子为固定数量的时代,每个时代验证一次,降低10倍的学习速率在过去的时代,以减少噪声的参数更新和允许网络参数安定下来接近最小的损失函数。

miniBatchSize = 256;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“个”,InitialLearnRate = params.InitialLearnRate,动量= params.Momentum,MaxEpochs = 60,LearnRateSchedule =“分段”,LearnRateDropPeriod = 40,LearnRateDropFactor = 0.1,MiniBatchSize = MiniBatchSize,L2Regularization = params.L2Regularization,洗牌=“every-epoch”,Verbose = false,ValidationData = {XValidation, YValidation},ValidationFrequency = ValidationFrequency);

指标部分指定可选功能,评估实验的结果。实验经理评估这些函数在每次完成培训网络。这个例子包括自定义度量函数ErrorRate。这个函数随机选择5000个测试图片和标签,评估培训网络在这些图像,计算图像网络分类的比例。在MATLAB开设这个函数编辑器,选择度量函数的名称并单击编辑。函数的代码也出现在计算出错率

优化方向字段说明贝叶斯优化算法所使用的指标作为目标函数。对于这个实验,实验经理寻求减少的价值ErrorRate指标。

运行实验

当您运行实验,实验管理器搜索hyperparameters的最佳组合的选择指标。每个实验在实验中使用的新组合hyperparameter值基于前面试验的结果。

培训要花些时间。实验的时间限制,您可以修改贝叶斯优化选项通过减少最大运行时间或试验的最大数量。然而,请注意,运行不到30试验可以防止贝叶斯优化算法收敛于最优组hyperparameters。

默认情况下,实验管理器运行一个审判。如果你有并行计算工具箱™,你可以同时运行多个试验或卸载实验作为批处理作业在集群:

  • 运行一个审判的一次实验,在实验管理器将来发布,在模式中,选择顺序并点击运行

  • 同时,运行多个试验模式中,选择同时并点击运行。如果没有当前并行池、实验管理器启动一个集群使用默认配置文件。实验管理器然后运行尽可能多的同时试验有工人在你平行池。为达到最佳效果,在你运行你的实验,开始与尽可能多的工人gpu并行池。有关更多信息,请参见并行使用实验管理器来训练网络GPU计算的需求(并行计算工具箱)

  • 将实验作为批处理作业,模式中,选择批处理顺序批处理同时,指定你集群池大小,然后单击运行。有关更多信息,请参见卸载实验作为集群的批处理作业

一个表的结果显示每个试验指标函数值。实验经理强调了试验所选指标的最优值。例如,在这个实验中,第五审判产生最小的错误率。

确定优化所选指标的试验,实验管理器使用最好的标准“min-observed”。有关更多信息,请参见贝叶斯优化算法(统计和机器学习的工具箱)bestPoint(统计和机器学习的工具箱)

评估结果

显示混淆矩阵最好的审判在你的实验中,选择最低的结果表中的行出错率。然后,在审查结果,点击验证数据

执行额外的计算,导出训练网络工作区。

  1. 实验管理器将来发布,点击出口>训练网络

  2. 在对话框窗口中,输入工作空间变量的名称为导出的网络。默认的名称是trainedNetwork

  3. 使用导出的网络作为辅助函数的输入testSummary。例如,在MATLAB命令窗口中,输入:

testSummary (trainedNetwork)

查看这个函数的代码,看看总结测试数据。这个函数来评估网络在几个方面:

  • 它预测整个测试集的标签并计算测试错误。因为实验管理器确定最好的网络没有揭露网络整个测试集,测试误差可以高于自定义指标的价值ErrorRate

  • 它计算标准错误(testErrorSE)和近似95%置信区间(testError95CI泛化的对待每个图像的分类错误率的测试集是一个独立的事件有一定概率的成功。使用这种假设,分类错误的数量是二项分布图像。这种方法通常被称为瓦尔德方法

  • 它显示一些测试图片连同他们的预测类和类的概率。

函数显示这些统计数据的摘要在MATLAB命令窗口。

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
测试出错率:0.1829标准误差:95%置信区间:0.0039 (0.1753,0.1905)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

记录对你的实验的结果,添加一个注释。

  1. 在结果表中,右键单击ErrorRate细胞最好的审判。

  2. 选择添加注释

  3. 注释窗格中,在文本框中输入你的观察。

有关更多信息,请参见排序、过滤和注释的实验结果

关闭实验

实验的浏览器窗格中,右键单击项目并选择的名称关闭项目。实验管理器关闭所有的实验和结果包含在项目中。

设置函数

这个函数配置培训数据、网络体系结构和培训选择实验。这个函数的输入是一个结构从hyperparameter表与字段。函数返回三个输出,训练一个网络用于图像分类问题。

函数[augimdsTrain层,选项]= BayesOptExperiment_setup (params)

负荷训练数据

datadir = tempdir;downloadCIFARData (datadir);[XTrain、YTrain XTest,欧美]= loadCIFARData (datadir);idx = randperm(元素个数(欧美),5000);XValidation = XTest (:,:,:, idx);YValidation =欧美(idx);图象尺寸= [32 32 3];pixelRange = 4 [4];imageAugmenter = imageDataAugmenter (RandXReflection = true,RandXTranslation = pixelRange,RandYTranslation = pixelRange);augimdsTrain = augmentedImageDatastore(图象尺寸、XTrain YTrain,DataAugmentation = imageAugmenter);

定义网络体系结构

numClasses =元素个数(独特(YTrain));numF =轮(16 /√(params.SectionDepth));层= [imageInputLayer(图象尺寸)convBlock (3 numF params.SectionDepth) maxPooling2dLayer(3步= 2,填充=“相同”)convBlock (3 2 * numF params.SectionDepth) maxPooling2dLayer(3步= 2填充=“相同”)convBlock (3、4 * numF params.SectionDepth) averagePooling2dLayer (8) fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];

指定培训选项

miniBatchSize = 256;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“个”,InitialLearnRate = params.InitialLearnRate,动量= params.Momentum,MaxEpochs = 60,LearnRateSchedule =“分段”,LearnRateDropPeriod = 40,LearnRateDropFactor = 0.1,MiniBatchSize = MiniBatchSize,L2Regularization = params.L2Regularization,洗牌=“every-epoch”,Verbose = false,ValidationData = {XValidation, YValidation},ValidationFrequency = ValidationFrequency);
结束

创建块卷积层

这个函数创建一个块numConvLayers卷积层,每一个都有指定filterSizenumFilters过滤器,每个紧随其后的是一批归一化层和ReLU层。

函数层= convBlock (filterSize numFilters numConvLayers)层= [convolution2dLayer (filterSize、numFilters、填充=“相同”)batchNormalizationLayer reluLayer];层= repmat(层numConvLayers 1);结束

计算出错率

这个指标函数作为输入结构包含字段trainedNetwork,trainingInfo,参数

  • trainedNetworkSeriesNetwork对象或DAGNetwork返回的对象trainNetwork函数。

  • trainingInfo返回的是一个包含培训信息的结构吗trainNetwork函数。

  • 参数是一个从hyperparameter表结构字段。

函数选择5000个测试图片和标签,评估测试集上的训练网络,计算预测图像标签,和计算测试数据的错误率。

函数metricOutput = ErrorRate (trialInfo) datadir = tempdir;[~,~,XTest,欧美]= loadCIFARData (datadir);idx = randperm(元素个数(欧美),5000);XTest = XTest (:,:,:, idx);欧美=欧美(idx);YPredicted =分类(trialInfo.trainedNetwork XTest);metricOutput = 1 -意味着(YPredicted = =次);结束

总结测试数据

这个函数计算测试错误,标准误差,一个近似95%置信区间并显示这些统计数据的摘要在MATLAB命令窗口。功能也有一些测试图片连同他们的预测类和类的概率。

函数testSummary(净)datadir = tempdir;[~,~,XTest,欧美]= loadCIFARData (datadir);(YPredicted,聚合氯化铝)=(净,XTest)进行分类;testError = 1 -意味着(YPredicted = =次);元=元素个数(欧美);testErrorSE =√testError * (1-testError) / nt);testError95CI = [testError - 1.96 * testErrorSE, testError + 1.96 * testErrorSE];流(“\ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n \ n”);流(“测试错误率:% .4f \ n”,testError);流(“标准错误:% .4f \ n”,testErrorSE);流(“% 95%置信区间:[%。4 f % .4f \ n”testError95CI (1) testError95CI (2));流(“\ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n \ n”);图idx = randperm(元素个数(欧美),9);i = 1:元素个数(idx)次要情节(3 3 i) imshow (XTest (:,:,:, idx(我)));概率= num2str (100 * max(聚合氯化铝(idx(我),:)),3);predClass =字符串(YPredicted (idx (i)));标签= predClass +”:“+问题+“%”;标题(标签)结束结束

另请参阅

应用程序

功能

相关的话题

Baidu
map