主要内容

利用贝叶斯优化优化实验超参数

这个例子展示了如何在应用程序中使用贝叶斯优化实验经理为卷积神经网络寻找最优的网络超参数和训练选项。贝叶斯优化提供了一种在实验中扫描超参数的替代策略。您可以为每个超参数指定一个值范围,并选择一个要优化的指标,Experiment Manager将搜索可优化所选指标的超参数组合。贝叶斯优化需要统计学和机器学习工具箱™。

在本例中,您训练一个网络来对来自CIFAR-10数据集的图像进行分类。该实验使用贝叶斯优化来找到使自定义度量函数最小化的超参数组合。超参数包括训练算法的选项以及网络体系结构本身的参数。自定义度量函数确定随机选择的测试集的分类错误。有关在“实验管理器”中定义自定义度量的详细信息,请参阅使用度量函数评价深度学习实验

或者,您可以通过调用bayesopt函数。有关更多信息,请参见基于贝叶斯优化的深度学习

开放实验

首先,打开示例。实验管理器加载一个带有可检查和运行的预配置实验的项目。打开实验,在实验的浏览器窗格中,双击实验的名称(BayesOptExperiment).

内置的训练实验由描述、超参数表、设置函数和度量函数集合组成,用于评估实验的结果。使用贝叶斯优化的实验包括限制实验持续时间的额外选项。有关更多信息,请参见配置内建训练实验

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

寻找卷积神经网络的最优超参数和训练方案。超参数决定网络的分段深度、初始学习速率、随机梯度下降动量和L2正则化强度。

Hyperparameters第节指定了策略(贝叶斯优化)和用于实验的超参数选项。对于每个超参数,指定以下选项:

  • 范围-输入一个给出实值或整值超参数下界和上界的双元素向量,或一个列出分类超参数可能值的字符串数组或单元格数组。

  • 类型-挑选真实的(实值hyperparameter),整数(整数值hyperparameter),或明确的(分类hyperparameter)。

  • 使改变-挑选没有一个(没有变换)日志(对数变换)日志,超参数必须为真实的整数和积极的。超参数在对数尺度上进行搜索和建模。

当您运行实验时,实验管理器将搜索超参数的最佳组合。本实验中的每个试验都使用基于前一个试验结果的超参数值的新组合。这个例子使用了这些超参数:

  • 剖面深度—用于控制网络深度。网络中的总层数为9*截面深度+7.在实验设置函数中,每一层卷积滤波器的数量与1 /√(SectionDepth),因此,对于不同的剖面深度,每次迭代的参数数量和所需的计算量大致相同。

  • InitialLearnRate-最佳学习率取决于您的数据以及您正在培训的网络。

  • 动力-随机梯度下降动量通过使当前更新包含与前一个迭代中的更新成比例的贡献,为参数更新增加了惯性。惯性效应导致更平滑的参数更新和降低噪声固有的随机梯度下降。

  • L2调节-使用L2正则化防止过拟合。搜索正则化强度的空间,找到一个好的值。数据增强和批处理归一化也有助于网络的正则化。

贝叶斯优化选项,您可以通过输入最大时间(以秒为单位)和运行的最大试验次数来指定试验的持续时间。为了最好地利用贝叶斯优化的力量,您应该执行至少30个目标函数评估。

设置函数配置实验的培训数据、网络体系结构和培训选项。要检查设置功能,请在设置函数,点击编辑.设置函数在MATLAB®编辑器中打开。

在本例中,setup函数有三个部分。

  • 负荷训练数据从CIFAR-10数据集下载并提取图像和标签。数据集大约是175mb。根据你的互联网连接,下载过程可能需要一些时间。对于训练数据,本例创建augmentedImageDatastore通过随机平移和水平反射。数据增强有助于防止网络过度拟合和记忆训练图像的确切细节。为了启用网络验证,本示例使用了5000个没有增强的图像。有关此数据集的更多信息,请参见图像数据集

  • 定义网络体系结构定义用于深度学习分类的卷积神经网络的体系结构。在这个例子中,要训练的网络有三个部分,每个部分都有剖面深度相同的卷积层。每个卷积层后面都有一个批处理规范化层和一个ReLU层。卷积层添加了填充,以便其空间输出大小始终与输入大小相同。在节之间,最大池层将空间维度的采样率降低两倍。以确保每个卷积层所需的计算量大致相同,从一个部分到下一个部分,滤波器的数量增加了两倍。每个卷积层中滤波器的数量与1 /√(SectionDepth),因此不同深度的网络具有大致相同数量的参数,每次迭代所需的计算量也大致相同。

  • 指定培训选项定义一个培训选项目的为实验使用值为训练选项“InitialLearnRate”“动量”“L2Regularization”由贝叶斯优化算法生成。该示例对网络进行固定次数的历元训练,每个历元验证一次,并在最后一个历元期间将学习率降低10倍,以减少参数更新的噪声,并使网络参数稳定在接近损失函数最小值的位置。

指标节指定对实验结果进行评估的可选函数。实验管理器每次完成网络训练后都会评估这些功能。如果需要查看度量函数,请选择度量函数的名称,单击编辑。度量函数将在MATLAB编辑器中打开。

这个例子包括自定义度量函数错误率.该函数随机选取5000幅测试图像和标签,对这些图像进行训练后的网络评估,并计算网络误分类的比例。

作用metricOutput = ErrorRate (trialInfo)
datadir = tempdir;[~, ~, XTest,欧美]= loadCIFARData (datadir);
idx = randperm(元素个数(欧美),5000);XTest = XTest (:,:,:, idx);欧美=欧美(idx);
YPredicted=分类(trialInfo.trainedNetwork,XTest);metricOutput=1-平均值(YPredicted==YTest);
结束

优化方向字段表示贝叶斯优化算法用作目标函数的度量。对于此实验,实验管理器寻求最小化错误率指标。

运行实验

当您运行这个实验时,experiment Manager会根据所选的指标搜索超参数的最佳组合。本实验中的每个试验都使用基于前一个试验结果的超参数值的新组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验。为了获得最好的结果,在您运行您的实验之前,启动一个与gpu一样多的worker的并行池。有关更多信息,请参见使用实验管理器并行训练网络GPU支金宝app持情况(并行计算工具箱)

  • 要一次运行一次试验,请在“试验管理器”工具栏上单击运行

  • 要同时进行多个试验,请单击使用并行然后运行.如果当前没有并行池,实验管理器将使用默认的集群配置文件启动一个。然后,根据可用的并行工作人员的数量,实验管理器执行多个同时的试验。

结果表显示了每次试验的度量函数值。实验管理器表示所选度量的最优值的试验。例如,在这个实验中,第三次试验产生的错误率最小。

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

评估结果

要在您的实验中测试最佳试验,首先选择结果表中错误率最低的行。

要显示所选试验的混淆矩阵,请单击混淆矩阵

要执行其他计算,请将经过训练的网络导出到工作空间。

  1. 实验经理将来发布,点击出口

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

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

testSummary (trainedNetwork)

此函数以多种方式评估网络:

  • 它预测整个测试集的标签并计算测试错误。因为实验管理器在不向整个测试集公开网络的情况下确定最佳网络,所以测试错误可能高于自定义度量值错误率

  • 计算标准误差(testErrorSE)大约95%的置信区间(测试仪rROR95CI)的概化错误率,将测试集中的每一幅图像的分类处理为具有一定成功概率的独立事件。使用这个假设,分类错误的图像的数量遵循二项分布。这种方法通常被称为瓦尔德方法

  • 它显示了一些测试图像以及它们预测的类和这些类的概率。

该函数在MATLAB命令窗口中显示这些统计信息的摘要。

******************************************
测试错误率:0.1801标准错误:0.0038 95%置信区间:[0.1726,0.1876]
******************************************

要记录对实验结果的观察,请添加注释。

  1. 在结果表中,右键单击错误率最好的审判单元。

  2. 选择添加注释

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

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

关闭实验

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

另请参阅

应用程序

功能

相关话题