监控定制培训循环的进展
为深度学习培训网络时,它通常是有用的监测培训进展。通过策划各种指标在训练,你可以学习如何培训进展。例如,您可以决定是否以及如何快速网络精度提高,和网络是否开始overfit训练数据。
监视和阴谋一个定制的培训的培训进展循环,使用TrainingProgressMonitor
对象。您可以使用一个TrainingProgressMonitor
:
创建动画定义度量的阴谋和记录自定义指标在训练。
显示和记录在训练的培训信息。
停止训练。
跟踪培训进展进度条。
跟踪运行时间。
如果你训练一个网络使用trainNetwork
和培训的选择情节= "训练进步"
,trainNetwork
函数自动地块指标在训练。有关更多信息,请参见监测深度学习培训的进展。
创建培训进度监控
创建一个定制的培训进度监控使用trainingProgressMonitor
函数。
监控= trainingProgressMonitor;
的TrainingProgressMonitor
对象自动跟踪运行时间。当你创建计时器开始TrainingProgressMonitor
对象。确保运行时间准确地反映了训练时间,创建监视器对象立即开始前你的训练循环。
培训进度窗口
控制的显示培训进度窗口使用的属性TrainingProgressMonitor
对象。你可以设置属性之前、期间或之后的训练。为一个例子,演示如何使用监视器来跟踪培训进展,明白了在训练监控定制培训循环进展。
例子训练进度窗口 | 关键 | 属性和设置 | 示例代码 |
---|---|---|---|
为一个例子,演示如何生成这个人物,看到的在训练监控定制培训循环进展。 |
1 | 指定阴谋使用指标 |
添加指标名称前培训。 班长。指标= [“TrainingLoss”,“ValidationLoss”]; |
添加新的指向情节和保存的值 |
培训期间更新度量值。 recordMetrics(监控、迭代…TrainingLoss = lossTrain,…ValidationLoss = lossValidation); |
||
2 | 设置x设在标签使用 |
设置x设在标签 班长。包含=“迭代”;
|
|
3 | 组指标为一个次要情节使用培训 |
集团培训和确认损失的情节。 groupSubPlot(监控,…“准确性”,(“TrainingAccuracy”,“ValidationAccuracy”]); |
|
4 | 使用跟踪培训的进展 |
设置培训进度百分比。 班长。进步= 100*(currentIteration/maxIterations); |
|
5 | 跟踪培训通过设置状态 |
设置当前状态 班长。状态=“运行”;
|
|
6 | 使早期的停止。当你点击停止按钮时, |
使早期的停止,包括下面的代码在您的自定义训练循环。 而numEpochs < maxEpochs & & ~ monitor.Stop%的定制培训循环代码。结束 |
|
7 | 跟踪启动和运行时间。当你创建时间开始TrainingProgressMonitor 对象。 |
创建一个监视和启动计时器。 监控= trainingProgressMonitor; |
|
8 | 显示信息的培训进度窗口使用 |
添加信息名称前培训。 班长。信息= [“时代”,“LearningRate”]; |
|
更新信息培训进度窗口中的值并保存的值 |
培训期间更新信息值。 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”];
设置
设在标签迭代
和当前状态配置
。设置进步
财产0
表明训练还没有开始。
班长。包含=“迭代”;班长。状态=“配置”;班长。进步= 0;
选择执行环境和记录这些信息在培训进度监控使用updateInfo
。
executionEnvironment =“汽车”;如果(executionEnvironment = =“汽车”& & canUseGPU) | | executionEnvironment = =“图形”updateInfo(监视、ExecutionEnvironment =“图形”);其他的updateInfo(监视、ExecutionEnvironment =“CPU”);结束
开始自定义训练循环
列车网络使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。为每个mini-batch:
损失评估模型,使用渐变和状态
dlfeval
和modelLoss
功能。更新网络状态。确定基于时间的学习速率衰减学习速率的时间表。
更新网络参数使用
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预测和标签使用这些步骤:
使用预处理的图像
preprocessMiniBatchPredictors
函数。提取标签数据从输入单元阵列和连接条目分类沿着二维数组。
一个炎热的分类标签编码成数字数组。编码的第一个维度产生一个相匹配的形状编码阵列网络输出。
函数[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:结束});结束
另请参阅
trainingProgressMonitor
|groupSubPlot
|recordMetrics
|updateInfo