通过使用度量函数评估深度学习实验
这个例子展示了如何使用度量函数来评估一个实验的结果。默认情况下,当您运行一个内置的训练实验,实验管理器计算损失,准确性(分类实验),和根均方误差(回归实验)为每个审判你的实验。计算其他措施,创建自己的度量函数。例如,您可以定义度量函数:
测试训练网络的预测性能。
评估培训进展通过计算验证损失的斜率在最后的时期。
显示大小的一个实验中使用的网络,使用不同的网络架构为每个审判。
当每个审判结束训练,实验经理评估指标函数和结果表中显示他们的价值观。
在这个例子中,你训练一个网络分类手写数字的图像。两个度量函数确定如何训练网络标识的数字图像一个和7个。有关使用实验管理器的更多信息,训练一个网络的图像分类,看看通过全面Hyperparameters图像分类。
定义度量函数
添加一个度量函数一个内置的训练实验。
在实验窗格中,在指标,点击添加。
在增加指标对话框,输入一个名称并单击的度量函数好吧。如果你输入一个函数的名称已经存在的项目,实验管理器将其添加到实验。否则,实验管理器创建一个函数定义一个默认模板。
选择度量函数的名称并单击编辑。MATLAB®编辑器中打开的度量函数。
度量函数的输入是一个结构有三个字段:
trainedNetwork
是SeriesNetwork
对象或DAGNetwork
返回的对象trainNetwork
函数。有关更多信息,请参见净。trainingInfo
返回的是一个包含培训信息的结构吗trainNetwork
函数。有关更多信息,请参见信息。参数
是一个从hyperparameter表结构字段。
一个自定义的输出指标函数必须是一个标量值,一个逻辑值,或一个字符串。
开放实验
首先,打开示例。实验管理器加载一个预配置实验的项目,你可以检查和运行。开放实验,实验的浏览器面板,双击ClassificationExperiment
。
内置训练实验由一个描述,hyperparameters表,设置函数,和一组度量函数对实验的结果进行评估。有关更多信息,请参见配置内置的训练实验。
的描述字段包含的文本描述的实验。对于这个例子,描述是:
数字分类,评估结果通过使用度量功能:* OnesAsSevens返回1 s并被错误地归类为7 s的百分比。* SevensAsOnes返回7 s并被错误地归类为1 s的百分比。
的Hyperparameters节指定策略和hyperparameter值用于实验。当您运行实验,实验管理器使用每一列车网络的组合hyperparameter hyperparameter表中指定的值。下面的例子使用了hyperparametersInitialLearnRate
和动力
。
的设置函数部分指定配置训练数据的功能,网络体系结构,实验和培训选项。在MATLAB®编辑器打开这个功能,点击编辑。函数的代码也出现在设置函数。setup函数的输入是一个结构从hyperparameter表与字段。函数返回三个输出,训练一个网络用于图像分类问题。在这个例子中,setup函数这些部分:
负荷训练数据定义图像包含训练和验证数据的数据存储。这个例子中加载图像的数字数据集。在这个数据集的更多信息,见图像数据集。
digitDatasetPath = fullfile (toolboxdir (“nnet”),…“nndemos”,“nndatasets”,“DigitDataset”);imdsTrain = imageDatastore (digitDatasetPath,…IncludeSubfolders = true,…LabelSource =“foldernames”);numTrainingFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);
定义网络体系结构定义了建筑的卷积神经网络深度学习分类。下面的例子使用了默认分类网络提供的设置函数模板。
inputSize = [28 28 1];numClasses = 10;层= [imageInputLayer (inputSize) convolution2dLayer (20) batchNormalizationLayer reluLayer fullyConnectedLayer (numClasses) softmaxLayer classificationLayer);
指定培训选项定义了一个
trainingOptions
实验对象。这个示例加载训练选项的值InitialLearnRate
和动力
从hyperparameter表。
选择= trainingOptions (“个”,…MaxEpochs = 5,…ValidationData = imdsValidation,…ValidationFrequency = 30,…InitialLearnRate = params.InitialLearnRate,…动量= params.Momentum,…Verbose = false);
的指标部分指定可选功能,评估实验的结果。实验经理评估这些函数在每次完成培训网络。这个例子包括两个度量函数:
OnesAsSevens
收益的百分比的数字图像,经过训练的网络分类为7。SevensAsOnes
返回的图像的百分比数字七,训练网络分类的。
这些函数使用训练网络对整个数字数据集进行分类。然后,的函数确定图像的数量预测实际的标签和标签不同意。例如,函数OnesAsSevens
计算图像的实际标签的数量“1”
和预测的“7”
。同样地,函数SevensAsOnes
计算图像的实际标签的数量“7”
和预测的“1”
。在MATLAB开设这些函数编辑器中,选择一个度量函数的名称并单击编辑。这些函数的代码也出现在找到并被错误地归类为七人和找到七并被错误地归类为的。
运行实验
当您运行实验,实验经理列车网络设置函数定义的六倍。每个试验使用不同的组合hyperparameter值。默认情况下,实验管理器运行一个审判。如果你有并行计算工具箱™,你可以同时运行多个试验或卸载实验作为批处理作业在集群:
运行一个审判的一次实验,在实验管理器将来发布,在模式中,选择
顺序
并点击运行。同时,运行多个试验模式中,选择
同时
并点击运行。如果没有当前并行池、实验管理器启动一个集群使用默认配置文件。实验管理器然后运行尽可能多的同时试验有工人在你平行池。为达到最佳效果,在你运行你的实验,开始与尽可能多的工人gpu并行池。有关更多信息,请参见并行使用实验管理器来训练网络和GPU计算的需求(并行计算工具箱)。将实验作为批处理作业,模式中,选择
批处理顺序
或批处理同时
,指定你集群和池大小,然后单击运行。有关更多信息,请参见卸载实验作为集群的批处理作业。
一个表的结果显示每个试验指标函数值。
评估结果
为你的实验,找到最好的结果排序结果的表。例如,试验发现的最小的数被误诊的。
指出OnesAsSevens列。
点击三角形图标。
选择按升序排序。
同样,试验发现的最小的数是不是七通过打开的下拉菜单SevensAsOnes列和选择按升序排序。
如果没有一个试验最小化这两个值,选择试验指标的排名很好。例如,您可以导出到MATLAB工作区作为一个结果表表
数组和计算两个度量值的平均值为每个审判。
在实验管理器将来发布,点击出口>结果表。
在对话框窗口中,输入工作空间变量导出的表的名称。默认的名称是
resultsTable
。使用导出的网络作为输入的函数
averageMetrics
。例如,在MATLAB命令窗口中,输入:
averageMetrics (resultsTable);
查看这个函数的代码,看看计算平均度量值。函数显示的度量信息的摘要试验平均最低的度量值。
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
最佳试验:4的并被错误地归类为七:1.3000%(排名:3)七并被错误地归类为:1.2000%(排名:1)平均度量值:1.2500%
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
记录对你的实验的结果,添加一个注释。
在结果表中,右键单击OnesAsSevens细胞最好的审判。
选择添加注释。
在注释窗格中,在文本框中输入你的观察。
重复前面的步骤SevensAsOnes细胞。
有关更多信息,请参见排序、过滤和注释的实验结果。
关闭实验
在实验的浏览器窗格中,右键单击项目并选择的名称关闭项目。实验管理器关闭所有的实验和结果包含在项目中。
设置函数
这个函数配置培训数据、网络体系结构和培训选择实验。这个函数的输入是一个结构从hyperparameter表与字段。函数返回三个输出,训练一个网络用于图像分类问题。
函数[imdsTrain层,选项]= ClassificationExperiment_setup (params)
负荷训练数据
digitDatasetPath = fullfile (toolboxdir (“nnet”),…“nndemos”,“nndatasets”,“DigitDataset”);imdsTrain = imageDatastore (digitDatasetPath,…IncludeSubfolders = true,…LabelSource =“foldernames”);numTrainingFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);
定义网络体系结构
inputSize = [28 28 1];numClasses = 10;层= [imageInputLayer (inputSize) convolution2dLayer (20) batchNormalizationLayer reluLayer fullyConnectedLayer (numClasses) softmaxLayer classificationLayer);
指定培训选项
选择= trainingOptions (“个”,…MaxEpochs = 5,…ValidationData = imdsValidation,…ValidationFrequency = 30,…InitialLearnRate = params.InitialLearnRate,…动量= params.Momentum,…Verbose = false);
结束
找到并被错误地归类为七人
这个函数确定的数量的并被错误地归类为7。
函数metricOutput = OnesAsSevens trialInfo actualValue =“1”;predValue =“7”;网= trialInfo.trainedNetwork;digitDatasetPath = fullfile (toolboxdir (“nnet”),…“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,…IncludeSubfolders = true,…LabelSource =“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K =总和(YActual = = actualValue & YPred = = predValue);N =总和(YActual = = actualValue);metricOutput = 100 * K / N;结束
找到七并被错误地归类为的
这个函数确定的数量的并被错误地归类为7。
函数metricOutput = SevensAsOnes trialInfo actualValue =“7”;predValue =“1”;网= trialInfo.trainedNetwork;digitDatasetPath = fullfile (toolboxdir (“nnet”),…“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,…IncludeSubfolders = true,…LabelSource =“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K =总和(YActual = = actualValue & YPred = = predValue);N =总和(YActual = = actualValue);metricOutput = 100 * K / N;结束
计算平均度量值
这个函数从结果中提取度量值表。然后函数附加平均为每个指标度量值和排名结果表,并显示的度量信息的摘要最好的试验。
函数结果= averageMetrics(结果)Metric1 = results.Metrics.OnesAsSevens;Metric2 = results.Metrics.SevensAsOnes;MetricAverage = (Metric1 + Metric2) / 2;结果=[结果表(MetricAverage、Metric1 Metric2)];N =身高(结果);结果= sortrows(结果,“Metric1”);OnesAsSevensRanking = (1: N) ';结果=[结果表(OnesAsSevensRanking)];结果= sortrows(结果,“Metric2”);SevensAsOnesRanking = (1: N) ';结果=[结果表(SevensAsOnesRanking)];结果= sortrows(结果,“MetricAverage”);结果= removevars(结果,“Metric1”,“Metric2”]);流(“\ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n \ n”);流(“最佳试验:% d \ n”,results.Trial (1));流(”并被错误地归类为七:%。4 f % %(排名:% d) \ n”,…results.Metrics.OnesAsSevens (1) results.OnesAsSevensRanking (1));流(“七并被错误地归类为:%。4 f % %(排名:% d) \ n”,…results.Metrics.SevensAsOnes (1) results.SevensAsOnesRanking (1));流(“平均度量值:% .4f % % \ n”,…results.MetricAverage (1));流(“\ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n \ n”);结束