创建一个回归的深度学习实验
这个例子展示了如何训练一个用于回归的深度学习网络实验管理器.在本例中,您使用回归模型来预测手写数字的旋转角度。一个自定义的度量函数确定在可接受的误差范围内的角度预测的分数。有关使用回归模型的更多信息,请参见训练卷积神经网络回归.
开放实验
首先,打开示例。实验管理器加载一个带有预先配置的实验的项目,您可以检查和运行该实验。打开实验,在实验的浏览器窗格中,双击实验的名称(RegressionExperiment
).
内置的训练实验由描述、超参数表、设置函数和用于评估实验结果的度量函数集合组成。有关更多信息,请参见配置内置训练实验.
的描述字段包含实验的文本描述。对于本例,描述如下:
回归模型预测数字的旋转角度,使用超参数指定:*卷积层使用的滤波器数量*网络中退出层的概率
的Hyperparameters部分指定策略(详尽的扫描
)和用于实验的超参数值。运行实验时,“实验管理器”将使用超参数表中指定的超参数值的每个组合来训练网络。这个例子使用了两个超参数:
概率
设置神经网络中退出层的概率。默认情况下,此超参数的值指定为(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) convolution2dLayer(3,numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer dropoutLayer(param . probability) fullyConnectedLayer(1) regressionLayer];
指定培训项目定义了一个
trainingOptions
实验对象。该示例训练网络30个epoch。学习速率最初为0.001,在20个epoch之后下降到0.1。该软件在训练数据上训练网络,并在训练期间定期计算验证数据的均方根误差(RMSE)和损失。验证数据不用于更新网络权重。
miniBatchSize = 128;validationFrequency = floor(编号(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在这个例子的最后。
运行实验
当您运行实验时,实验管理器将对由设置函数定义的网络进行六次训练。每次试验使用不同的超参数值组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验,或者将试验卸载为集群中的批处理作业。
每次进行一个试验,在实验管理器将来发布,在模式中,选择
顺序
并点击运行.同时进行多项试验,在模式中,选择
同时
并点击运行.如果当前没有并行池,experimental Manager将使用默认集群配置文件启动一个并行池。然后,实验管理器同时运行与并行池中工作人员数量相同的试验。为了获得最好的结果,在运行实验之前,启动一个具有与gpu一样多的worker的并行池。有关更多信息,请参见使用实验管理器并行训练网络而且GPU计算要求(并行计算工具箱).将实验卸载为批处理作业模式中,选择
批处理顺序
或批处理同时
,指明你的集群而且池大小,并单击运行.有关更多信息,请参见将实验作为批处理作业卸载到集群.
一个结果表显示了每个试验的RMSE和损失。该表还显示了试验的准确性,由自定义度量函数确定精度
.
在实验运行时,显示训练图并跟踪每次试验的进度审查结果,点击培训策划.
评估结果
要为你的实验找到最好的结果,请按准确度对结果表进行排序。
指向精度列。
单击三角形图标。
选择按降序排序.
准确率最高的试验出现在结果表的顶部。
为了测试单个试验的性能,导出训练过的网络并显示每个数字类的残差的箱形图。
选择准确率最高的试验。
在实验管理器将来发布,点击出口>训练网络.
在对话框窗口中,为导出的网络输入工作区变量的名称。默认名称为
trainedNetwork
.使用导出的网络作为函数的输入
plotResiduals
,在附录3在这个例子的最后。例如,在MATLAB命令窗口中输入:
plotResiduals (trainedNetwork)
该函数为每个数字创建残差箱形图。具有最高精度的数字类具有接近于零的平均值和小方差。
要记录对实验结果的观察,请添加注释。
在结果表中,右键单击精度最好的审判细胞。
选择添加注释.
在注释窗格,在文本框中输入您的观察结果。
有关更多信息,请参见对实验结果进行排序、过滤和注释.
关闭实验
在实验的浏览器窗格中,右键单击项目的名称并选择关闭项目.实验管理器关闭项目中包含的所有实验和结果。
附录1:设置函数
该功能配置实验的训练数据、网络架构和训练选项。
输入
参数个数
是一个包含来自experimental Manager超参数表字段的结构。
输出
XTrain
为包含训练数据的四维数组。YTrain
为一维数组,其中包含用于训练的回归值,层
是定义神经网络架构的层图。选项
是一个trainingOptions
对象。
函数[XTrain,YTrain,layers,options] = RegressionExperiment_setup1(params) [XTrain,~,YTrain] = digitTrain4DArrayData;[XValidation,~,YValidation] = digitTest4DArrayData;inputSize = [28 28 1];numFilters = params.Filters;图层= [imageInputLayer(inputSize) convolution2dLayer(3,numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,2*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,Stride=2) convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,4*numFilters,Padding=“相同”) batchNormalizationLayer reluLayer dropoutLayer(param . probability) fullyConnectedLayer(1) regressionLayer];miniBatchSize = 128;validationFrequency = floor(编号(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);结束
附录2:回归模型的计算精度
该函数从真实角度计算在可接受的误差范围内的预测数。
函数metricOutput = Accuracy(trialInfo) [XValidation,~,YValidation] = digitTest4DArrayData;ypredict = predict(trialInfo.trainedNetwork,XValidation);predictionError = YValidation - yexpected;THR = 10;numCorrect = sum(abs(predictionError) < thr);numValidationImages = nummel (YValidation);metricOutput = 100*numCorrect/numValidationImages;结束
附录3:每个数字残差的显示框图
这个函数为每个数字创建一个残差箱形图。
函数plotResiduals(net) [XValidation,~,YValidation] = digitTest4DArrayData;ypredict = predict(net,XValidation);predictionError = YValidation - yexpected;residualMatrix =重塑(predictionError,500,10);图箱线图(residualMatrix,...“标签”,[“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”])包含(“数字阶级”) ylabel (“度错误”)标题(“残差”)结束