这个例子展示了如何使用使用训练一个深度学习网络进行回归实验管理器.在本例中,您使用回归模型来预测手写数字的旋转角度。一个自定义度量函数决定了与真实角度在可接受的误差范围内的角度预测的比例。有关使用回归模型的更多信息,请参见训练卷积神经网络用于回归.
首先,打开示例。实验管理器加载一个带有可检查和运行的预配置实验的项目。打开实验,在实验的浏览器窗格中,双击实验的名称(RegressionExperiment
).
内置的训练实验由描述、超参数表、设置函数和度量函数集合组成,用于评估实验的结果。有关更多信息,请参见配置内置训练实验.
的描述字段包含实验的文本描述。对于本例,描述是:
回归模型来预测数字的旋转角度,使用超参数来指定:*卷积层使用的滤波器数量*网络中退出层的概率
的Hyperparameters部分指明策略(详尽的扫描
)和用于实验的超参数值。当您运行实验时,experiment Manager使用超参数表中指定的每个超参数值组合来训练网络。这个例子使用了两个超参数:
概率
设置神经网络中退出层的概率。默认情况下,超参数的值指定为(0.1 - 0.2)
.
过滤器
表示神经网络中第一卷积层使用的滤波器数量。在后续的卷积层中,滤波器的数量是这个值的倍数。默认情况下,超参数的值指定为(4 6 8)
.
的设置函数配置实验的训练数据、网络架构和训练选项。setup函数的输入是一个带有超参数表字段的结构。setup函数返回四个输出,用于训练网络处理图像回归问题。设置功能有三个部分。
负荷训练数据将实验的训练和验证数据定义为4-D阵列。每个训练和验证数据集包含5000张从0到9的数字图像。回归值对应于数字的旋转角度。
[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;
定义网络体系结构定义用于回归的卷积神经网络的体系结构。
inputSize = [28 28 1];numFilters = params.Filters;[imageInputLayer(inputSize)]卷积2dlayer (3,numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2)卷积2dlayer (3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer relullayer dropoutLayer(params.Probability) fulllyconnectedlayer (1) regressionLayer];
指定培训选项定义了一个trainingOptions
实验对象。实例训练网络30个时代。学习速率最初为0.001,20个纪元后下降0.1倍。该软件在训练数据上对网络进行训练,并在训练期间定期计算验证数据的均方根误差(RMSE)和损失。验证数据不用于更新网络权重。
miniBatchSize = 128;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“个”,...MiniBatchSize = MiniBatchSize,...MaxEpochs = 30,...InitialLearnRate = 1 e - 3,...LearnRateSchedule =“分段”,...LearnRateDropFactor = 0.1,...LearnRateDropPeriod = 20,...洗牌=“every-epoch”,...ValidationData = {XValidation, YValidation},...ValidationFrequency = ValidationFrequency,...Verbose = false);
检查设置功能,在设置函数,点击编辑.设置函数在MATLAB®编辑器中打开。此外,设置函数的代码显示在附录1在这个例子的最后。
的指标节指定对实验结果进行评估的可选函数。实验管理器每次完成网络训练后都会评估这些功能。如果需要查看度量函数,请选择度量函数的名称,单击编辑.度量函数在MATLAB编辑器中打开。
这个例子包括一个度量函数精度
这决定了与真实角度在可接受的误差范围内的角度预测的百分比。缺省情况下,该函数的阈值为10度。度量函数的代码出现在附录2在这个例子的最后。
当您运行实验时,实验管理器对设置功能定义的网络进行六次训练。每次试验都使用不同的超参数值组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验。为了获得最好的结果,在您运行您的实验之前,启动一个与gpu一样多的worker的并行池。有关更多信息,请参见使用实验管理器并行训练网络和GPU支金宝app持情况(并行计算工具箱).
要一次运行一次实验,请在实验管理器工具条上单击运行.
要同时进行多个试验,请单击使用并行然后运行.如果当前没有并行池,实验管理器将使用默认的集群配置文件启动一个。然后,根据可用的并行工作人员的数量,实验管理器执行多个同时的试验。
结果表显示了每个试验的RMSE和损失。该表还显示了由定制度量函数确定的试验的准确性精度
.
当实验正在进行时,单击培训策划展示训练图,并跟踪每次试验的进度。
要为你的实验找到最好的结果,请按准确性对结果表进行排序。
指出精度列。
点击三角形图标。
选择按降序排序.
准确度最高的试验显示在结果表的顶部。
为了测试单个试验的性能,导出经过训练的网络并显示每个数字类的残差箱线图。
选择精度最高的试验。
在实验管理器将来发布,点击出口.
在对话框窗口中,为导出的网络输入工作区变量的名称。默认名称为trainedNetwork
.
使用导出的网络作为函数的输入plotResiduals
,列于附录3在这个例子的最后。例如,在MATLAB命令窗口中,输入:
plotResiduals (trainedNetwork)
该函数为每个数字创建一个剩余箱线图。精度最高的数字类的平均值接近于零,方差小。
要记录对实验结果的观察,请添加注释。
在结果表中,右键单击精度最好的审判单元。
选择添加注释.
在注释窗格,在文本框中输入您的观察结果。
有关更多信息,请参见对实验结果进行排序、过滤和注释.
在实验的浏览器窗格中,右键单击项目的名称并选择关闭项目.实验管理器关闭项目中包含的所有实验和结果。
配置实验的训练数据、网络架构和训练选项。
输入
参数个数
是一个包含来自实验管理器超参数表字段的结构。
输出
XTrain
为包含训练数据的4-D阵列。
YTrain
是一个包含训练回归值的一维数组,
层
是定义神经网络架构的一层图。
选项
是一个trainingOptions
对象。
函数[XTrain,YTrain,layers,options] = RegressionExperiment_setup1(params)[XValidation ~, YValidation] = digitTest4DArrayData;inputSize = [28 28 1];numFilters = params.Filters;[imageInputLayer(inputSize)]卷积2dlayer (3,numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2)卷积2dlayer (3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer relullayer dropoutLayer(params.Probability) fulllyconnectedlayer (1) regressionLayer];miniBatchSize = 128;validationFrequency =地板(元素个数(YTrain) / miniBatchSize);选择= trainingOptions (“个”,...MiniBatchSize = MiniBatchSize,...MaxEpochs = 30,...InitialLearnRate = 1 e - 3,...LearnRateSchedule =“分段”,...LearnRateDropFactor = 0.1,...LearnRateDropPeriod = 20,...洗牌=“every-epoch”,...ValidationData = {XValidation, YValidation},...ValidationFrequency = ValidationFrequency,...Verbose = false);结束
这个函数从真实的角度计算在可接受的误差范围内的预测次数。
函数metricOutput = Accuracy(trialInfo) [XValidation,~,YValidation] = digitTest4DArrayData;YPredicted =预测(trialInfo.trainedNetwork XValidation);predictionError = YValidation - YPredicted;用力推= 10;numCorrect = sum(abs(predictionError) < thr);numValidationImages =元素个数(YValidation);metricOutput = 100 * numCorrect / numValidationImages;结束
这个函数为每个数字创建一个剩余箱线图。
函数plotResiduals(net) [XValidation,~,YValidation] = digitTest4DArrayData;YPredicted =预测(净,XValidation);predictionError = YValidation - YPredicted;residualMatrix =重塑(predictionError, 500, 10);图箱线图(residualMatrix,...“标签”, {' 0 ',' 1 ',' 2 ',“3”,“4”,“5”,“6”,“7”,“8”,“9”})包含(“数字类”) ylabel (度误差的)标题(“残差”)结束