这个例子展示了如何使用实验管理器.在本例中,您训练两个网络将MathWorks商品的图像分类为五个类。每个网络使用三种算法进行训练。在每种情况下,混淆矩阵将一组验证图像的真实类与训练网络预测的类进行比较。有关训练网络进行图像分类的更多信息,请参见训练深度学习网络对新图像进行分类.
这个实验需要深度学习工具箱™模型GoogLeNet网络金宝app支持包。在运行实验之前,通过调用金宝appgooglenet
功能,点击下载链接。
首先,打开示例。实验管理器加载一个带有可检查和运行的预配置实验的项目。打开实验,在实验的浏览器窗格中,双击实验的名称(ClassificationExperiment
).
内置的训练实验由描述、超参数表、设置函数和度量函数集合组成,用于评估实验的结果。有关更多信息,请参见配置内置训练实验.
的描述字段包含实验的文本描述。对于本例,描述是:
商品图像分类使用:*一个未经训练的网络(默认)或一个预先训练的网络(googlenet)
的Hyperparameters部分指明策略(详尽的扫描
)和用于实验的超参数值。当您运行实验时,experiment Manager使用超参数表中指定的每个超参数值组合来训练网络。这个例子使用了两个超参数:
网络
指定要培训的网络。选项包括“默认”
(图像分类实验模板提供的默认网络)和“googlenet”
(预先训练过的googleet网络,用于迁移学习的修改层)。
解算器
表示用于训练网络的算法。选项包括“个”
(动量随机梯度下降),“rmsprop”
(均方根传播),以及“亚当”
(自适应时刻估计)。有关这些算法的更多信息,请参见随机梯度下降法.
的设置函数配置实验的训练数据、网络架构和训练选项。setup函数的输入是一个带有超参数表字段的结构。setup函数返回三个输出,用于训练网络处理图像分类问题。在本例中,setup函数有三个部分。
负荷训练数据定义包含训练和验证数据的图像数据存储。这个示例从文件加载图像MerchData.zip
.这个小数据集包含75个MathWorks商品的图像,属于五个不同的类。这些图像的尺寸是227 × 227 × 3。有关此数据集的更多信息,请参见图像数据集.
文件名=“MerchData.zip”;dataFolder = fullfile (tempdir,“MerchData”);如果~存在(dataFolder“dir”解压缩(文件名,tempdir);结束
imdsTrain = imageDatastore (dataFolder,...IncludeSubfolders = true,....LabelSource =“foldernames”);
numTrainingFiles = 0.7;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);
定义网络体系结构定义用于深度学习分类的卷积神经网络的体系结构。在这个例子中,网络训练的选择取决于超参数的值网络
.
开关参数个数。网络情况下“默认”inputSize = [227 227 3];numClasses = 5;layers = [imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer relullayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer]; / /创建一个新的层情况下“googlenet”inputSize = [224 224 3];numClasses = 5;imdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);imdsValidation = augmentedImageDatastore (inputSize (1:2),...imdsValidation);网= googlenet;层= layerGraph(净);newLearnableLayer = fullyConnectedLayer (numClasses,...Name =“new_fc”,...WeightLearnRateFactor = 10,...BiasLearnRateFactor = 10);层= replaceLayer(层,“loss3-classifier”, newLearnableLayer);newClassLayer = classificationLayer (Name =“new_classoutput”);层= replaceLayer(层,“输出”, newClassLayer);否则错误(“未定义的网络选择。”);结束
指定培训选项定义了一个trainingOptions
实验对象。通过实例,对网络进行8个纪元的训练解算器
超参数表中的项。
= trainingOptions(参数选项。解算器,...MiniBatchSize = 10,...MaxEpochs = 8,...InitialLearnRate = 1的军医,...洗牌=“every-epoch”,...ValidationData = imdsValidation,...ValidationFrequency = 5,...Verbose = false);
检查设置功能,在设置函数,点击编辑.设置函数在MATLAB®编辑器中打开。此外,设置函数的代码显示在附录在这个例子的最后。
的指标节指定对实验结果进行评估的可选函数。本示例不包括任何自定义度量函数。
当您运行实验时,实验管理器对设置功能定义的网络进行六次训练。每次试验都使用不同的超参数值组合。默认情况下,实验管理器每次运行一个试验。如果您有并行计算工具箱™,您可以同时运行多个试验。为了获得最好的结果,在您运行您的实验之前,启动一个与gpu一样多的worker的并行池。有关更多信息,请参见使用实验管理器并行训练网络和GPU支金宝app持情况(并行计算工具箱).
要一次运行一次实验,请在实验管理器工具条上单击运行.
要同时进行多个试验,请单击使用并行然后运行.如果当前没有并行池,实验管理器将使用默认的集群配置文件启动一个。然后,根据可用的并行工作人员的数量,实验管理器执行多个同时的试验。
结果表显示了每次试验的准确性和损失。
当实验正在进行时,单击培训策划展示训练图,并跟踪每次试验的进度。
为了找到实验的最佳结果,根据验证精度对结果表进行排序。
指出验证准确性列。
点击三角形图标。
选择按降序排序.
验证精度最高的试验出现在结果表的顶部。
要显示此试验的混淆矩阵,请选择结果表中的第一行并单击混淆矩阵.
要记录对实验结果的观察,请添加注释。
在结果表中,右键单击验证准确性最好的审判单元。
选择添加注释.
在注释窗格,在文本框中输入您的观察结果。
有关更多信息,请参见对实验结果进行排序、过滤和注释.
在实验的浏览器窗格中,右键单击项目的名称并选择关闭项目.实验管理器关闭项目中包含的所有实验和结果。
配置实验的训练数据、网络架构和训练选项。
输入
参数个数
是一个包含来自实验管理器超参数表字段的结构。
输出
imdsTrain
是训练数据的图像数据存储。
层
是定义神经网络架构的一层图。
选项
是一个trainingOptions
对象。
函数[imdsTrain,layers,options] = ClassificationExperiment_setup1(params) filename =“MerchData.zip”;dataFolder = fullfile (tempdir,“MerchData”);如果~存在(dataFolder“dir”解压缩(文件名,tempdir);结束imdsTrain = imageDatastore (dataFolder,...IncludeSubfolders = true,....LabelSource =“foldernames”);numTrainingFiles = 0.7;[imdsTrain, imdsValidation] = splitEachLabel (imdsTrain numTrainingFiles);开关参数个数。网络情况下“默认”inputSize = [227 227 3];numClasses = 5;layers = [imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer relullayer fulllyconnectedlayer (numClasses) softmaxLayer classificationLayer]; / /创建一个新的层情况下“googlenet”inputSize = [224 224 3];numClasses = 5;imdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);imdsValidation = augmentedImageDatastore (inputSize (1:2),...imdsValidation);网= googlenet;层= layerGraph(净);newLearnableLayer = fullyConnectedLayer (numClasses,...Name =“new_fc”,...WeightLearnRateFactor = 10,...BiasLearnRateFactor = 10);层= replaceLayer(层,“loss3-classifier”, newLearnableLayer);newClassLayer = classificationLayer (Name =“new_classoutput”);层= replaceLayer(层,“输出”, newClassLayer);否则错误(“未定义的网络选择。”);结束= trainingOptions(参数选项。解算器,...MiniBatchSize = 10,...MaxEpochs = 8,...InitialLearnRate = 1的军医,...洗牌=“every-epoch”,...ValidationData = imdsValidation,...ValidationFrequency = 5,...Verbose = false);结束