主要内容

通过使用度量函数评估深度学习实验

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

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

  • 评估培训进展通过计算验证损失的斜率在最后的时期。

  • 显示大小的一个实验中使用的网络,使用不同的网络架构为每个审判。

当每个审判结束训练,实验经理评估指标函数和结果表中显示他们的价值观。

在这个例子中,你训练一个网络分类手写数字的图像。两个度量函数确定如何训练网络标识的数字图像一个和7个。有关使用实验管理器的更多信息,训练一个网络的图像分类,看看通过全面Hyperparameters图像分类

定义度量函数

添加一个度量函数一个内置的训练实验。

1。在实验窗格中,在指标,点击添加

2。在增加指标对话框,输入一个名称并单击的度量函数好吧。如果你输入一个函数的名称已经存在的项目,实验管理器将其添加到实验。否则,实验管理器创建一个函数定义一个默认模板。

3所示。选择度量函数的名称并单击编辑。MATLAB®编辑器中打开的度量函数。

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

  • trainedNetworkSeriesNetwork对象或DAGNetwork返回的对象trainNetwork函数。有关更多信息,请参见

  • trainingInfo返回的是一个包含培训信息的结构吗trainNetwork函数。有关更多信息,请参见信息

  • 参数是一个从hyperparameter表结构字段。

一个自定义的输出指标函数必须是一个标量值,一个逻辑值,或一个字符串。

开放实验

首先,打开示例。实验管理器加载一个预配置实验的项目,你可以检查和运行。开放实验,实验的浏览器面板,双击实验的名称(ClassificationExperiment)。

内置训练实验由一个描述,hyperparameters表,设置函数,和一组度量函数对实验的结果进行评估。有关更多信息,请参见配置内置的训练实验

描述字段包含的文本描述的实验。对于这个例子,描述是:

数字分类,评估结果通过使用度量功能:* OnesAsSevens返回1 s并被错误地归类为7 s的百分比。* SevensAsOnes返回7 s并被错误地归类为1 s的百分比。

Hyperparameters部分指定策略(详尽的扫描)和hyperparameter值用于实验。当您运行实验,实验管理器使用每一列车网络的组合hyperparameter hyperparameter表中指定的值。下面的例子使用了hyperparametersInitialLearnRate动力

设置函数配置培训数据、网络体系结构和培训选择实验。setup函数的输入是一个结构从hyperparameter表与字段。setup函数返回三个输出,训练一个网络用于图像分类问题。在这个例子中,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);

检查设置功能,设置函数,点击编辑。setup函数MATLAB®编辑器中打开。此外,设置的代码出现在函数附录1最后这个例子。

指标部分指定可选功能,评估实验的结果。实验经理评估这些函数在每次完成培训网络。检查一个度量函数,选择度量函数的名称并单击编辑。MATLAB编辑器中打开的度量函数。

这个例子包括两个度量函数。

  • OnesAsSevens收益的百分比的数字图像,经过训练的网络分类为7。

  • SevensAsOnes返回的图像的百分比数字七,训练网络分类的。

这些函数使用训练网络对整个数字数据集进行分类。然后,的函数确定图像的数量预测实际的标签和标签不同意。例如,函数OnesAsSevens计算图像的实际标签的数量' 1 '和预测的“7”。同样地,函数SevensAsOnes计算图像的实际标签的数量“7”和预测的' 1 '。这些度量函数的代码出现在附录2附录3最后这个例子。

运行实验

当您运行实验,实验经理列车网络设置函数定义的六倍。每个试验使用不同的组合hyperparameter值。默认情况下,实验管理器运行一个审判。如果你有并行计算工具箱™,你可以同时运行多个试验。为达到最佳效果,在你运行你的实验,开始与尽可能多的工人gpu并行池。有关更多信息,请参见并行使用实验管理器来训练网络GPU的金宝app支持版本(并行计算工具箱)

  • 运行一个审判的一次实验,在实验管理器将来发布,点击运行

  • 同时运行多个试验,点击使用并行然后运行。如果没有当前并行池、实验管理器启动一个集群使用默认配置文件。实验管理器然后执行多个同时试验,根据并行工人的数量。

一个表的结果显示每个试验指标函数值。

评估结果

为你的实验,找到最好的结果排序结果的表。例如,试验发现的最小的数被误诊的。

  1. 指出OnesAsSevens列。

  2. 点击三角形图标。

  3. 选择按升序排序

同样,试验发现的最小的数是不是七通过打开的下拉菜单SevensAsOnes列和选择按升序排序

如果没有一个试验同时最小化度量函数,考虑优先排名很好,为每一个指标。例如,在这些结果,试验5是一个三大审判为每个度量函数。

记录对你的实验的结果,添加一个注释。

  1. 在结果表中,右键单击OnesAsSevens细胞最好的审判。

  2. 选择添加注释

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

  4. 重复前面的步骤SevensAsOnes细胞。

有关更多信息,请参见排序、过滤和注释的实验结果

关闭实验

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

附录1:设置功能

这个函数配置培训数据、网络体系结构和培训选择实验。

输入

  • 参数个数从实验管理器是一个结构字段hyperparameter表。

输出

  • imdsTrain是一个图像数据存储训练数据。

  • 是一个层图,定义了神经网络架构。

  • 选项是一个trainingOptions对象。

函数[imdsTrain层,选项]= ClassificationExperiment_setup1 (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);结束

附录2:找到并被错误地归类为七人

这个函数确定的数量的并被错误地归类为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;结束

附录3:找到七并被错误地归类为的

这个函数确定的数量的并被错误地归类为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;结束

另请参阅

应用程序

功能

相关的话题