主要内容

使用度量函数评价深度学习实验

这个例子展示了如何使用度量函数来评估一个实验的结果。默认情况下,当你运行一个内置的训练实验时,实验经理计算实验中每一次试验的损失、准确度(用于分类实验)和均方根误差(用于回归实验)。要计算其他度量,创建自己的度量函数。例如,你可以定义度量函数:

  • 测试培训网络的预测性能。

  • 通过计算最终时期的验证损失的坡度来评估培训进度。

  • 显示在实验中使用的网络的大小,该实验用于每个试验使用不同的网络架构。

当每次试验结束培训时,实验经理评估度量函数,并在结果表中显示它们的值。

在本例中,您训练网络对手写数字图像进行分类。两个度量函数确定训练网络识别数字1和数字7图像的能力。有关使用实验管理器训练网络进行图像分类的更多信息,请参阅通过扫描Quand参数进行图像分类

定义度量函数

将度量功能添加到内置培训实验中。

1.在实验窗格,下面指标,点击添加

2.在这方面加度量对话框中,输入度量函数的名称并单击好啊.如果输入项目中已经存在的函数的名称,Experiment Manager会将其添加到实验中。否则,实验管理器将创建一个由默认模板定义的函数。

3.选择度量函数的名称,单击编辑.度量函数在MATLAB®编辑器中打开。

对度量函数的输入是具有三个字段的结构:

  • trainedNetwork系列网络对象或Dagnetwork.对象返回的trainNetwork函数。有关更多信息,请参阅

  • TrainingInfo.结构是否包含由trainNetwork函数。有关更多信息,请参阅信息

  • 参数是一个带有HyperParameter表的字段的结构。

自定义度量标准函数的输出必须是标量编号,逻辑值或字符串。

开放实验

首先,打开这个例子。实验经理用一个预配置的实验加载一个项目,您可以检查和运行。打开实验,在实验浏览器窗格中,双击实验的名称(分类表现).

内置训练实验包括描述,一个超级参数,设置功能和度量函数的集合,以评估实验结果。有关更多信息,请参阅配置内建训练实验

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

数字分类,使用度量函数评估结果:* OnesSsevens将1s错误分类为7s的百分比返回。* Sevensones将7s错误分类为1S的百分比返回。

封闭率第节指定了策略(彻底的扫描)和用于实验的超参数值。当您运行实验时,experiment Manager使用超参数表中指定的每个超参数值组合来训练网络。这个例子使用了超参数InitialLearnRate动力

设置功能配置实验的训练数据、网络架构和训练选项。setup函数的输入是一个带有超参数表字段的结构。setup函数返回三个输出,用于训练网络处理图像分类问题。在本例中,setup函数有三个部分。

  • 负荷训练数据定义包含训练和验证数据的图像数据存储。这个示例从Digits数据集加载图像。有关此数据集的更多信息,请参见图像数据集

digitDatasetPath = fullfile (toolboxdir (“nnet”),......“nndemos”“数据集”“digitdataset”);imdsTrain = imageDatastore (digitDatasetPath,......IncludeSubfolders = true,......labelsource =.“foldernames”);
numtringfiles = 750;[IMDStrain,IMDSValidation] = SpliteachLabel(IMDStrain,NumTriningFiles);
  • 定义网络架构定义用于深度学习分类的卷积神经网络的体系结构。此示例使用设置函数模板提供的默认分类网络。

inputSize = [28 28 1];numClasses = 10;图层= [ImageInputLayer(InputSize)卷积2dlayer(5,20)BatchnormalizationLayer quothulayer全连接列(numclasses)softmaxlayer分类层];
  • 指定培训选项定义一个培训选项实验对象。该示例加载训练选项的值“InitialLearnRate”“动量”来自HyperParameter表。

选项=培训选项(“个”......maxepochs = 5,......ValidationData=imdsValidation,......ValidationFrequency = 30,......InitialLearnRate=params.InitialLearnRate,......动量=参数。动力,......冗长=错误);

检查设置功能,下设置功能,点击编辑.安装功能在MATLAB®编辑器中打开。此外,设置函数的代码出现在附录1在这个例子的末尾。

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

此示例包括两个度量函数。

  • Onesassevens.返回经过训练的网络将数字1的图像误分类为7的百分比。

  • 七索斯返回经过训练的网络误分类为数字7的图像的百分比。

这些函数中的每一个都使用训练网络对整个数字数据集进行分类。然后,该函数确定实际标签和预测标签不同意的图像的数量。例如,功能Onesassevens.计算具有实际标签的图像数量'1'和一个预测的标签“7”.同样,函数七索斯计算具有实际标签的图像数量“7”和一个预测的标签'1'.这些度量函数的代码如下所示附录2附录3在这个例子的末尾。

运行实验

运行实验时,实验经理培训由设置功能定义的网络六次。每次试用都使用不同的HyperParameter值组合。默认情况下,实验管理器一次运行一项试验。如果您有并行计算工具箱™,则可以同时运行多个试验。为了获得最佳效果,在您运行实验之前,请使用与GPU一样许多工人的平行池开始。有关更多信息,请参阅使用实验管理器并行训练网络GPU支金宝app持情况(并行计算工具箱)

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

  • 要同时运行多次试验,请单击使用并行然后.如果没有当前并行池,则实验管理器使用默认群集配置文件启动一个。然后,实验经理执行多个同时试验,具体取决于可用的并行工作台的数量。

结果表显示了每次试用的度量函数值。

评估结果

为了找到实验的最佳结果,对结果表进行排序。例如,找出分类错误次数最少的试验。

  1. 指出Onesassevens.列。

  2. 点击三角形图标。

  3. 选择升序排序

类似地,通过打开“错误分类七”的下拉菜单,找到错误分类七数最少的试验七索斯列和选择升序排序

如果没有一次试验同时最小化两个度量函数,考虑优先选择对每个度量都有良好排名的试验。例如,在这些结果中,试验5是每个指标函数的前三次试验之一。

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

  1. 在结果表中,右键单击Onesassevens.最佳试验的细胞。

  2. 选择添加注释

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

  4. 重复前面的步骤七索斯细胞。

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

关闭实验

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

附录1:设置功能

此功能配置实验的培训数据,网络架构和培训选项。

输入

  • 参数个数是一个包含来自实验管理器超参数表字段的结构。

输出

  • imdsTrain是用于训练数据的图像数据存储。

  • 层数是定义神经网络架构的层图。

  • 选项是一个培训选项对象

作用[imdsTrain,layers,options]=ClassificationExperiment_setup1(参数)digitDatasetPath=fullfile(toolboxdir(“nnet”),......“nndemos”“数据集”“digitdataset”);imdsTrain = imageDatastore (digitDatasetPath,......IncludeSubfolders = true,......labelsource =.“foldernames”);numtringfiles = 750;[IMDStrain,IMDSValidation] = SpliteachLabel(IMDStrain,NumTriningFiles);inputSize = [28 28 1];numClasses = 10;图层= [ImageInputLayer(InputSize)卷积2dlayer(5,20)BatchnormalizationLayer quothulayer全连接列(numclasses)softmaxlayer分类层];选项=培训选项(“个”......maxepochs = 5,......ValidationData=imdsValidation,......ValidationFrequency = 30,......InitialLearnRate=params.InitialLearnRate,......动量=参数。动力,......冗长=错误);结束

附录2:找出被误分类为7的

此函数确定错误分类为7的个数。

作用metricOutput=一个七(trialInfo)实际值='1';predvalue =“7”;net=trialInfo.trainedNetwork;digitDatasetPath=fullfile(toolboxdir(“nnet”),......“nndemos”“数据集”“digitdataset”);imds=图像数据存储(digitDatasetPath,......IncludeSubfolders = true,......labelsource =.“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K = sum(YActual == actualValue & YPred == predValue);N = sum(YActual == actualValue);metricOutput = 100 * K / N;结束

附录3:发现sevens被错误分类为

这个函数确定被误分类为1的7的数量。

作用metricOutput = SevensAsOnes(trialInfo) actualValue =“7”;predvalue ='1';net=trialInfo.trainedNetwork;digitDatasetPath=fullfile(toolboxdir(“nnet”),......“nndemos”“数据集”“digitdataset”);imds=图像数据存储(digitDatasetPath,......IncludeSubfolders = true,......labelsource =.“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K = sum(YActual == actualValue & YPred == predValue);N = sum(YActual == actualValue);metricOutput = 100 * K / N;结束

也可以看看

应用

职能

相关话题