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