创建一个深度学习实验回归
这个例子展示了如何训练回归通过深入学习网络实验管理器。在本例中,您使用回归模型预测手写数字的旋转角度。自定义度量函数决定了分数的角度预测从真实的角度可接受的误差范围内。有关使用回归模型的更多信息,请参阅火车卷积神经网络回归。
开放实验
首先,打开示例。实验管理器加载一个预配置实验的项目,你可以检查和运行。开放实验,实验的浏览器面板,双击RegressionExperiment
。
内置训练实验由一个描述,hyperparameters表,设置函数,和一组度量函数对实验的结果进行评估。有关更多信息,请参见配置内置的训练实验。
的描述字段包含的文本描述的实验。对于这个例子,描述是:
回归模型预测角度旋转的数字,使用hyperparameters指定:*卷积过滤器使用层的数量*辍学层网络的概率
的Hyperparameters节指定策略和hyperparameter值用于实验。当您运行实验,实验管理器使用每一列车网络的组合hyperparameter hyperparameter表中指定的值。这个示例使用两个hyperparameters:
概率
集的概率辍学层神经网络。默认情况下,这个hyperparameter指定的值(0.1 - 0.2)
。过滤器
表示数量的卷积过滤器使用的第一层的神经网络。在随后的卷积层,过滤器是这个值的倍数。默认情况下,这个hyperparameter的值指定为(4 6 8)
。
的设置函数部分指定配置训练数据的功能,网络体系结构,实验和培训选项。在MATLAB®编辑器打开这个功能,点击编辑。函数的代码也出现在设置函数。setup函数的输入是一个结构从hyperparameter表与字段。函数返回四个输出,用于训练网络形象回归问题。在这个例子中,setup函数这些部分:
负荷训练数据将实验的训练和验证数据定义为4 - d数组。培训和验证数据集包含5000数字从0到9的图像。回归值对应数字的旋转角度。
[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;
定义网络体系结构定义了建筑的卷积神经网络回归。
inputSize = [28 28 1];numFilters = params.Filters;层= [imageInputLayer inputSize convolution2dLayer (3 numFilters填充=“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer(2步= 2)convolution2dLayer (3 2 * numFilters填充=“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer(2步= 2)convolution2dLayer (3、4 * numFilters、填充=“相同”)batchNormalizationLayer reluLayer convolution2dLayer (3、4 * numFilters、填充=“相同”)batchNormalizationLayer reluLayer dropoutLayer (params.Probability) fullyConnectedLayer (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);
的指标部分指定可选功能,评估实验的结果。实验经理评估这些函数在每次完成培训网络。这个例子包括度量函数精度
决定的比例角度预测从真实的角度可接受的误差范围内。默认情况下,10度的函数使用一个阈值。在MATLAB开设这个函数编辑器,选择度量函数的名称并单击编辑。函数的代码也出现在回归模型的计算精度。
运行实验
当您运行实验,实验经理列车网络设置函数定义的六倍。每个试验使用不同的组合hyperparameter值。默认情况下,实验管理器运行一个审判。如果你有并行计算工具箱™,你可以同时运行多个试验或卸载实验作为批处理作业在集群:
运行一个审判的一次实验,在实验管理器将来发布,在模式中,选择
顺序
并点击运行。同时,运行多个试验模式中,选择
同时
并点击运行。如果没有当前并行池、实验管理器启动一个集群使用默认配置文件。实验管理器然后运行尽可能多的同时试验有工人在你平行池。为达到最佳效果,在你运行你的实验,开始与尽可能多的工人gpu并行池。有关更多信息,请参见并行使用实验管理器来训练网络和GPU计算的需求(并行计算工具箱)。将实验作为批处理作业,模式中,选择
批处理顺序
或批处理同时
,指定你集群和池大小,然后单击运行。有关更多信息,请参见卸载实验作为集群的批处理作业。
一个表的结果显示为每个审判RMSE和损失。桌子上还显示试验的准确性,由自定义度量函数精度
。
显示培训策划和跟踪每个试验的进展在实验时,审查结果,点击培训策划。
评估结果
找到最佳的实验结果,对表进行排序结果的准确性。
指出精度列。
点击三角形图标。
选择按照降序排列。
最高的试验精度出现在顶部的结果表。
来测试一个人的性能试验,导出训练网络,显示每个数字的剩余类的箱线图。
选择最高的试验精度。
在实验管理器将来发布,点击出口>训练网络。
在对话框窗口中,输入工作空间变量的名称为导出的网络。默认的名称是
trainedNetwork
。使用导出的网络作为输入的函数
plotResiduals
。例如,在MATLAB命令窗口中,输入:
plotResiduals (trainedNetwork)
查看这个函数的代码,看看每个数字展示盒的残差。每个数字的函数创建一个剩余箱线图。精度最高的数字类均值接近零和小方差。
记录对你的实验的结果,添加一个注释。
在结果表中,右键单击精度细胞最好的审判。
选择添加注释。
在注释窗格中,在文本框中输入你的观察。
有关更多信息,请参见排序、过滤和注释的实验结果。
关闭实验
在实验的浏览器窗格中,右键单击项目并选择的名称关闭项目。实验管理器关闭所有的实验和结果包含在项目中。
设置函数
这个函数配置培训数据、网络体系结构和培训选择实验。这个函数的输入是一个结构从hyperparameter表与字段。函数返回四个输出,用于训练网络形象回归问题。
函数[XTrain、YTrain层,选项]= RegressionExperiment_setup (params)
负荷训练数据
[XTrain ~, YTrain] = digitTrain4DArrayData;[XValidation ~, YValidation] = digitTest4DArrayData;
定义网络体系结构
inputSize = [28 28 1];numFilters = params.Filters;层= [imageInputLayer inputSize convolution2dLayer (3 numFilters填充=“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer(2步= 2)convolution2dLayer (3 2 * numFilters填充=“相同”)batchNormalizationLayer reluLayer averagePooling2dLayer(2步= 2)convolution2dLayer (3、4 * numFilters、填充=“相同”)batchNormalizationLayer reluLayer convolution2dLayer (3、4 * numFilters、填充=“相同”)batchNormalizationLayer reluLayer dropoutLayer (params.Probability) fullyConnectedLayer (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 =精度(trialInfo) [XValidation ~, YValidation] = digitTest4DArrayData;YPredicted =预测(trialInfo.trainedNetwork XValidation);predictionError = YValidation - YPredicted;用力推= 10;numCorrect = (abs (predictionError)和<刺);numValidationImages =元素个数(YValidation);metricOutput = 100 * numCorrect / numValidationImages;结束
每个数字展示盒的残差
这个函数创建一个为每个数字剩余箱线图。
函数~,plotResiduals(净)[XValidation YValidation] = digitTest4DArrayData;YPredicted =预测(净,XValidation);predictionError = YValidation - YPredicted;residualMatrix =重塑(predictionError, 500, 10);图箱线图(residualMatrix,…“标签”,(“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”])包含(“数字阶级”)ylabel (“度错误”)标题(“残差”)结束