此示例显示如何使用度量标准功能来评估实验结果。默认情况下,当您运行内置培训实验时,实验经理计算实验中每一次试验的损失、准确度(用于分类实验)和均方根误差(用于回归实验)。要计算其他度量,创建自己的度量函数。例如,你可以定义度量函数:
测试经过训练的网络的预测性能。
通过计算验证损失在最后阶段的斜率来评估训练进度。
显示每次试验使用不同网络架构的实验中所使用的网络的大小。
当每次试验结束培训时,实验经理评估度量函数,并在结果表中显示它们的值。
在此示例中,您训练网络以对手写数字的图像进行分类。两个度量函数决定训练有素的网络如何标识数字的图像一和七个。有关使用实验经理培训网络进行图像分类的更多信息,请参阅基于扫描超参数的图像分类.
向内置的训练实验添加一个度量函数。
1.在这方面实验窗格中,在指标,点击添加.
2.在添加指标对话框,输入度量标准功能的名称,然后单击好的.如果输入项目中已经存在的函数的名称,Experiment Manager会将其添加到实验中。否则,实验管理器将创建一个由默认模板定义的函数。
3.选择度量函数的名称,单击编辑.MATLAB®编辑器中打开的度量函数。
度量函数的输入是一个有三个字段的结构:
trainedNetwork
是个SeriesNetwork
对象或DAGNetwork
由此返回的对象trainNetwork
函数。有关更多信息,请参见网.
trainingInfo
结构是否包含由trainNetwork
函数。有关更多信息,请参见信息.
参数
是包含超参数表字段的结构。
自定义度量函数的输出必须是标量数、逻辑值或字符串。
首先,打开示例。实验管理器加载一个带有可检查和运行的预配置实验的项目。打开实验,在实验的浏览器窗格,双击实验的名称(ClassificationExperiment
).
内置的训练实验由描述、超参数表、设置函数和度量函数集合组成,用于评估实验的结果。有关更多信息,请参见配置内置培训实验.
的描述字段包含实验的文本描述。对于本例,描述是:
数字分类,使用度量函数评价结果:* OnesAsSevens返回1被误分类为7s的百分比。* SevensAsOnes返回误分类为1的7s的百分比。
的Hyperparameters部分指定策略(详尽的扫描
用于实验的)和Quand参数值。运行实验时,实验经理使用HyperParameter表中指定的HyperParameter值的每个组合来列车。此示例使用HyperParametersInitialLearnRate
和动力
.
的设置函数配置实验的训练数据、网络架构和训练选项。setup函数的输入是一个带有超参数表字段的结构。setup函数返回三个输出,用于训练网络处理图像分类问题。在本例中,setup函数有三个部分。
负荷训练数据定义包含训练和验证数据的图像数据存储。这个示例从Digits数据集加载图像。有关此数据集的更多信息,请参见图像数据集.
digitDatasetPath = fullfile (toolboxdir (“nnet”),...“nndemos”,“nndatasets”,“DigitDataset”);imdsTrain = imageDatastore (digitDatasetPath,...upplyubfolders = true,...LabelSource =“foldernames”);
numTrainingFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);
定义网络体系结构为深度学习分类定义卷积神经网络的架构。此示例使用Setup功能模板提供的默认分类网络。
inputSize = [28 28 1];numClasses = 10;layers = [imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer relullayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer]; / /创建一个新的层
指定培训选项定义A.培训选项
实验对象。该示例加载训练选项的值“InitialLearnRate”
和“动量”
从超参数表。
选择= trainingOptions (“SGDM”,...MaxEpochs = 5,...ValidationData = IMDSValidation,...ValidationFrequency = 30,...initiallearnrate = params.initiallearnrate,...动量=参数。动力,...verbose = false);
检查设置功能,在设置函数,点击编辑.设置函数在MATLAB®编辑器中打开。此外,设置函数的代码显示在附录1在这个例子结束时。
的指标节指定对实验结果进行评估的可选函数。实验管理器每次完成网络训练后都会评估这些功能。如果需要查看度量函数,请选择度量函数的名称,单击编辑.MATLAB编辑器中打开的度量标准函数。
这个例子包括两个度量函数。
OnesAsSevens
返回标号的图像的百分比,其中培训的网络将被误入七七分类。
SevensAsOnes
返回培训的网络错误分类为七个数字七的图像的百分比。
每个函数都使用经过训练的网络对整个数字数据集进行分类。然后,该函数确定实际标签和预测标签不一致的图像数量。例如,函数OnesAsSevens
计算实际标签为的图像的数量' 1 '
和一个预测的标签“7”
.同样,功能SevensAsOnes
计算实际标签为的图像的数量“7”
和一个预测的标签' 1 '
.这些度量函数的代码如下所示附录2和附录3在这个例子结束时。
当您运行实验时,实验管理器对设置功能定义的网络进行六次训练。每次试验都使用不同的超参数值组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验。为了获得最好的结果,在您运行您的实验之前,启动一个与gpu一样多的worker的并行池。有关更多信息,请参见使用实验经理并行培训网络和GPU支金宝app持情况(并行计算工具箱).
在实验管理器工具系列上运行一个实验试验,请单击运行.
要同时进行多个试验,请单击使用并行然后运行.如果当前没有并行池,实验管理器将使用默认的集群配置文件启动一个。然后,根据可用的并行工作人员的数量,实验管理器执行多个同时的试验。
结果表显示了每次试验的度量函数值。
为了找到实验的最佳结果,对结果表进行排序。例如,找出分类错误次数最少的试验。
指出OnesAsSevens列。
点击三角形图标。
选择升序排序.
同样,通过打开下拉菜单,找到具有最小错误分类七分的试验SevensAsOnes列和选择升序排序.
如果没有一次试验同时最小化两个度量函数,考虑优先选择对每个度量都有良好排名的试验。例如,在这些结果中,试验5是每个指标函数的前三次试验之一。
要记录对实验结果的观察,请添加注释。
在结果表中,右键单击OnesAsSevens最好的审判单元。
选择添加注释.
在注释窗格,在文本框中输入您的观察结果。
重复前面的步骤SevensAsOnes细胞。
有关更多信息,请参见对实验结果进行排序、过滤和注释.
在实验的浏览器窗格中,右键单击项目的名称并选择关闭项目.实验管理器关闭项目中包含的所有实验和结果。
配置实验的训练数据、网络架构和训练选项。
输入
参数个数
是一个包含来自实验管理器超参数表字段的结构。
输出
imdsTrain
是培训数据的图像数据存储。
层
是定义神经网络架构的一层图。
选项
是一个培训选项
目的。
功能[IMDStrain,图层,选项] = ClassificationExperiment_Setup1(Params)DigitDatasetPath = FullFile(ToolBoxDir(“nnet”),...“nndemos”,“nndatasets”,“DigitDataset”);imdsTrain = imageDatastore (digitDatasetPath,...upplyubfolders = true,...LabelSource =“foldernames”);numTrainingFiles = 750;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);inputSize = [28 28 1];numClasses = 10;layers = [imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer relullayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer]; / /创建一个新的层选择= trainingOptions (“SGDM”,...MaxEpochs = 5,...ValidationData = IMDSValidation,...ValidationFrequency = 30,...initiallearnrate = params.initiallearnrate,...动量=参数。动力,...verbose = false);结束
此功能确定将被错误分类为Sevens的数量。
功能metricutput = OnesAssevens(trimeinfo)实际Value=' 1 ';predValue =“7”;net = trialinfo.trountnetwork;digitDatasetPath = fullfile (toolboxdir (“nnet”),...“nndemos”,“nndatasets”,“DigitDataset”);imds = imagedataStore(DigitDatasetPath,...upplyubfolders = true,...LabelSource =“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K = sum(YActual == actualValue & YPred == predValue);N = sum(YActual == actualValue);metricOutput = 100 * K / N;结束
这个函数确定被误分类为1的7的数量。
功能metricOutput = SevensAsOnes(trialInfo) actualValue =“7”;predValue =' 1 ';net = trialinfo.trountnetwork;digitDatasetPath = fullfile (toolboxdir (“nnet”),...“nndemos”,“nndatasets”,“DigitDataset”);imds = imagedataStore(DigitDatasetPath,...upplyubfolders = true,...LabelSource =“foldernames”);YActual = imds.Labels;YPred =分类(净、imd);K = sum(YActual == actualValue & YPred == predValue);N = sum(YActual == actualValue);metricOutput = 100 * K / N;结束