主要内容

监控定制培训循环的进展

为深度学习培训网络时,它通常是有用的监测培训进展。通过策划各种指标在训练,你可以学习如何培训进展。例如,您可以决定是否以及如何快速网络精度提高,和网络是否开始overfit训练数据。

监视和阴谋一个定制的培训的培训进展循环,使用TrainingProgressMonitor对象。您可以使用一个TrainingProgressMonitor:

  • 创建动画定义度量的阴谋和记录自定义指标在训练。

  • 显示和记录在训练的培训信息。

  • 停止训练。

  • 跟踪培训进展进度条。

  • 跟踪运行时间。

如果你训练一个网络使用trainNetwork和培训的选择情节= "训练进步",trainNetwork函数自动地块指标在训练。有关更多信息,请参见监测深度学习培训的进展

创建培训进度监控

创建一个定制的培训进度监控使用trainingProgressMonitor函数。

监控= trainingProgressMonitor;

TrainingProgressMonitor对象自动跟踪运行时间。当你创建计时器开始TrainingProgressMonitor对象。确保运行时间准确地反映了训练时间,创建监视器对象立即开始前你的训练循环。

培训进度窗口

控制的显示培训进度窗口使用的属性TrainingProgressMonitor对象。你可以设置属性之前、期间或之后的训练。为一个例子,演示如何使用监视器来跟踪培训进展,明白了在训练监控定制培训循环进展

例子训练进度窗口 关键 属性和设置 示例代码

培训进度窗口显示两个情节与数字突出部分的窗口。第一个情节展示了培训和确认损失和第二个图显示了训练和验证的准确性。

为一个例子,演示如何生成这个人物,看到的在训练监控定制培训循环进展

1

指定阴谋使用指标指标财产。

添加指标名称前培训。

班长。指标= [“TrainingLoss”,“ValidationLoss”];

添加新的指向情节和保存的值MetricValues财产的使用recordMetrics。的recordMetrics函数需要度量值和训练循环步骤,如迭代或时代。培训策划,度量值对应y协调和培训循环步骤对应x协调。

培训期间更新度量值。

recordMetrics(监控、迭代TrainingLoss = lossTrain,ValidationLoss = lossValidation);

2

设置x设在标签使用包含财产。

设置x设在标签迭代

班长。包含=“迭代”;

3

组指标为一个次要情节使用培训groupSubPlot函数。

集团培训和确认损失的情节。

groupSubPlot(监控,“准确性”,(“TrainingAccuracy”,“ValidationAccuracy”]);

4

使用跟踪培训的进展进步财产。进步的值必须是一个数字范围[0100]。这个值显示为一个进度条的培训进度窗口。

设置培训进度百分比。

班长。进步= 100*(currentIteration/maxIterations);

5

跟踪培训通过设置状态状态财产。

设置当前状态“运行”

班长。状态=“运行”;

6

使早期的停止。当你点击停止按钮时,停止属性改变1(真正的)。训练停止循环退出时,如果你的训练停止属性是1

使早期的停止,包括下面的代码在您的自定义训练循环。

numEpochs < maxEpochs & & ~ monitor.Stop%的定制培训循环代码。结束

7 跟踪启动和运行时间。当你创建时间开始TrainingProgressMonitor对象。

创建一个监视和启动计时器。

监控= trainingProgressMonitor;

8

显示信息的培训进度窗口使用信息财产。信息值显示在培训进度窗口,但不出现在的情节。使用文本和数值信息,你想在培训进度窗口中显示。

添加信息名称前培训。

班长。信息= [“时代”,“LearningRate”];

更新信息培训进度窗口中的值并保存的值InfoData财产的使用updateInfo函数。

培训期间更新信息值。

updateInfo(监控,时代= currentEpoch,LearningRate = learnRate);

在训练监控定制培训循环进展

这个例子展示了如何监视的进程深入学习自定义训练循环。

负荷训练数据

加载数字数据集作为图像数据存储使用imageDatastore功能和指定包含图像数据的文件夹。

dataFolder = fullfile (toolboxdir (“nnet”),“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (dataFolder,IncludeSubfolders = true,LabelSource =“foldernames”);

分区数据为训练集和验证集。

[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.6, 0.2,“随机”);

网络在这个例子28-by-28-by-1需要输入图像的大小。自动调整训练图像,使用一个增强图像数据存储。指定附加的训练图像增强操作执行。

inputSize = [28 28 1];pixelRange = 5 [5];imageAugmenter = imageDataAugmenter (RandXTranslation = pixelRange,RandYTranslation = pixelRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,“DataAugmentation”,imageAugmenter);augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);

确定训练数据的类的数量。

类=类别(imdsTrain.Labels);numClasses =元素个数(类);

定义网络

定义一个网络图像分类。

层= [imageInputLayer (inputSize正常化=“没有”)convolution2dLayer(5、20、填充=“相同”)batchNormalizationLayer reluLayer convolution2dLayer(3、20、填充=“相同”)batchNormalizationLayer reluLayer fullyConnectedLayer (numClasses) softmaxLayer];

创建一个dlnetwork数组对象的层。

网= dlnetwork(层);

定义模型损失函数

创建函数modelLoss中列出,损失函数模型部分的例子。该函数作为输入dlnetwork对象和一个mini-batch输入数据与相应的目标。函数返回的损失,损失的梯度对可学的参数,和网络状态。

指定培训选项

列车网络十世mini-batch大小为128。

numEpochs = 10;miniBatchSize = 128;

指定的选项与动量(个)随机梯度下降优化。指定一个初始学习衰变率0.01,0.01,0.9和动量。

initialLearnRate = 0.01;衰变= 0.01;动量= 0.9;

火车模型

创建一个minibatchqueue对象流程和管理mini-batches图像在训练。为每个mini-batch:

  • 使用自定义mini-batch预处理功能preprocessMiniBatch(在这个例子中定义)转换编码的标签在一个炎热的变量。

  • 格式的图像数据维度标签“SSCB”(空间、空间、通道、批)。默认情况下,minibatchqueue把数据转换为对象dlarray与底层数据对象类型。没有格式的类标签。

  • 火车在GPU如果一个是可用的。默认情况下,minibatchqueue将每个输出转换为对象gpuArray对象如果GPU可用。使用GPU需要并行计算工具箱™许可和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)

准备培训和验证数据。

兆贝可= minibatchqueue (augimdsTrain,MiniBatchSize = MiniBatchSize,MiniBatchFcn = @preprocessMiniBatch,MiniBatchFormat = [“SSCB””“]);mbqValidation = minibatchqueue (augimdsValidation,MiniBatchSize = MiniBatchSize,MiniBatchFcn = @preprocessMiniBatch,MiniBatchFormat =“SSCB”);

验证标签转换为一个炎热的编码向量和转置编码标签匹配网络的输出格式。

TValidation = onehotencode (imdsValidation.Labels 2);TValidation = TValidation ';

个解算器初始化速度参数。

速度= [];

计算每个时代的迭代数。

numObservationsTrain =元素个数(imdsTrain.Files);numIterationsPerEpoch =装天花板(numObservationsTrain / miniBatchSize);numIterations = numEpochs * numIterationsPerEpoch;

准备培训进度监控

跟踪培训进展,创建一个TrainingProgressMonitor对象。记录培训损失和准确性,在训练和验证损失和准确性。培训进度监控自动跟踪对象的建设以来的运行时间。使用这个时间代表训练的时间,确保你创建TrainingProgressMonitor对象接近的开始训练循环。

监控= trainingProgressMonitor (指标= [“TrainingLoss”,“ValidationLoss”,“TrainingAccuracy”,“ValidationAccuracy”]);

情节的培训和验证指标在同一使用次要情节groupSubPlot

groupSubPlot(监控,“损失”,(“TrainingLoss”,“ValidationLoss”]);groupSubPlot(监控,“准确性”,(“TrainingAccuracy”,“ValidationAccuracy”]);

跟踪信息的学习速率值,时代,迭代,和执行环境。

班长。信息= [“LearningRate”,“时代”,“迭代”,“ExecutionEnvironment”];

设置 x 设在标签迭代和当前状态配置。设置进步财产0表明训练还没有开始。

班长。包含=“迭代”;班长。状态=“配置”;班长。进步= 0;

选择执行环境和记录这些信息在培训进度监控使用updateInfo

executionEnvironment =“汽车”;如果(executionEnvironment = =“汽车”& & canUseGPU) | | executionEnvironment = =“图形”updateInfo(监视、ExecutionEnvironment =“图形”);其他的updateInfo(监视、ExecutionEnvironment =“CPU”);结束

开始自定义训练循环

列车网络使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。为每个mini-batch:

  • 损失评估模型,使用渐变和状态dlfevalmodelLoss功能。更新网络状态。

  • 确定基于时间的学习速率衰减学习速率的时间表。

  • 更新网络参数使用sgdmupdate函数。

  • 记录和绘制培训损失和准确性recordMetrics

  • 更新和显示学习速率、时代和迭代使用updateInfo

  • 更新进度百分比。

在每个时代,记录和绘制验证准确性和损失。

绘图的准确性和损失的训练集和验证集是一个很好的方式来监控培训进度和检查网络是否过度拟合。然而,这些指标计算和绘图导致更长的训练时间。

时代= 0;迭代= 0;班长。状态=“运行”;%循环时期。时代< numEpochs & & ~班长。停止时代=时代+ 1;%洗牌数据。洗牌(兆贝可);%在mini-batches循环。hasdata(兆贝可)& & ~班长。停止iteration = iteration + 1;% mini-batch读取的数据。[X, T] =下一个(兆贝可);%评估模型梯度、州和使用dlfeval和损失% modelLoss功能。更新网络状态。(损失、渐变、状态)= dlfeval (@modelLoss,净,X, T);网。=状态;%确定为基于时间的学习速率衰减学习速率的时间表。learnRate = initialLearnRate /(1 +衰变*迭代);%更新使用个优化网络参数。(净、速度)= sgdmupdate(净、渐变速度,learnRate动量);%记录培训损失和准确性。Tdecode = onehotdecode (T,类,1);成绩=预测(净,X);Y = onehotdecode(成绩、类1);accuracyTrain = 100 *意味着(Tdecode = = Y);recordMetrics(监控、迭代TrainingLoss =损失,TrainingAccuracy = accuracyTrain);%更新学习速率、时代和迭代信息值。updateInfo(监控,LearningRate = learnRate,时代(时代)+ =字符串“的”+字符串(numEpochs),迭代字符串(迭代)+ =“的”+字符串(numIterations));%记录确认损失和准确性。如果迭代1 = = | | ~ hasdata(兆贝可)[欧美,scoresValidation] = modelPredictions(净、mbqValidation、类);lossValidation = crossentropy (scoresValidation TValidation);accuracyValidation = 100 * (imdsValidation意思。标签= =次);recordMetrics(监控、迭代ValidationLoss = lossValidation,ValidationAccuracy = accuracyValidation);结束%更新进度百分比。班长。进步= 100*iteration/numIterations;结束结束

更新培训的地位。

如果班长。停止== 1 monitor.Status =“训练停止”;其他的班长。状态=“培训完成”;结束

一个TrainingProgressMonitor作为一个对象具有相同的属性和方法experiments.Monitor对象。因此,您可以很容易地适应您的绘图代码中使用实验管理器设置脚本。有关更多信息,请参见准备绘图代码自定义训练实验

金宝app支持功能

损失函数模型

modelLoss函数作为输入dlnetwork对象和mini-batch输入数据X与相应的目标T。函数返回的损失,损失的梯度参数对可学的,和网络状态。自动计算梯度,使用dlgradient函数。

函数(损失、渐变、状态)= modelLoss(净,X, T)%通过网络转发数据。[Y,状态]=前进(净,X);%计算熵的损失。损失= crossentropy (Y, T);%计算梯度的损失对可学的参数。梯度= dlgradient(损失、net.Learnables);结束

模型的预测函数

modelPredictions函数作为输入dlnetwork对象和一个minibatchqueue对象兆贝可和网络类。函数计算模型遍历所有数据的预测minibatchqueue对象。这个函数使用onehotdecode函数找到预测类最高的分数。

函数(预测,分数)= modelPredictions(净、兆贝可类)预测= [];成绩= [];%重置mini-batch队列。重置(兆贝可);%在mini-batches循环。hasdata(兆贝可)X =(兆贝可);Y =预测(净,X);%进行预测。得分=(分数Y);%解码标签和附加到输出。Y = onehotdecode (Y,类,1)';预测=(预测;Y);结束结束

小批预处理功能

preprocessMiniBatch函数进行预处理的mini-batch预测和标签使用这些步骤:

  1. 使用预处理的图像preprocessMiniBatchPredictors函数。

  2. 提取标签数据从输入单元阵列和连接条目分类沿着二维数组。

  3. 一个炎热的分类标签编码成数字数组。编码的第一个维度产生一个相匹配的形状编码阵列网络输出。

函数[X, T] = preprocessMiniBatch (dataX人数()%预处理预测。X = preprocessMiniBatchPredictors (dataX);%从细胞中提取标签数据和连接。猫(T = 2,人数({1:结束});%一个炎热的编码标签。T = onehotencode (T, 1);结束

Mini-Batch预测预处理功能

preprocessMiniBatchPredictors函数进行预处理mini-batch预测因子的提取图像数据从输入单元阵列和连接到一个数字数组。灰度输入,连接在第四维度添加每个图像的三维空间,作为一个单通道维度。

函数X = preprocessMiniBatchPredictors (dataX)%连接。猫(X = 4, dataX{1:结束});结束

另请参阅

|||

相关的话题