主要内容

监控深度学习训练进度

这个例子展示了如何监控深度学习网络的训练过程。

当你为深度学习训练网络时,监控训练进度通常是有用的。通过在训练期间绘制各种指标,您可以了解训练是如何进行的。例如,您可以确定网络准确性是否以及有多快在提高,以及网络是否开始过度拟合训练数据。

此示例显示如何监视使用trainNetwork函数。对于使用自定义训练循环训练的网络,使用trainingProgressMonitor对象在训练期间绘制指标。有关更多信息,请参见监控定制培训循环进度

当你设置情节培训选项“训练进步”trainingOptions并开始网络培训,trainNetwork在每次迭代中创建一个图形并显示训练指标。每次迭代都是对梯度的估计和网络参数的更新。中指定验证数据trainingOptions,然后图中显示了每次的验证指标trainNetwork验证网络。该图描述如下:

  • 训练精度-每个小批量的分类精度。

  • 平滑训练精度-平滑训练精度,通过对训练精度应用平滑算法得到。它比未平滑的精度噪音更小,更容易发现趋势。

  • 验证准确性-整个验证集的分类精度(指定使用trainingOptions).

  • 培训损失平滑训练损失,确认损失-每个小批、其平滑版本和验证集上的损失。如果你的网络的最后一层是classificationLayer,则损失函数为交叉熵损失。有关分类和回归问题的损失函数的更多信息,请参见输出层

对于回归网络,该图描绘的是均方根误差(RMSE)而不是精度。

这个数字标志着每一次训练时代使用阴影背景。epoch是对整个数据集的完整遍历。

在训练过程中,单击右上角的停止按钮,可以停止训练并返回网络的当前状态。例如,当网络的准确率达到一个平台期,并且很明显准确率不再提高时,您可能想要停止训练。单击停止按钮后,可能需要一段时间才能完成训练。一旦训练完成,trainNetwork返回经过训练的网络。

训练结束后,查看结果显示最终验证的精度和训练结束的原因。如果OutputNetwork培训选项为“最后一次迭代的”(默认),最终的指标对应于最后的训练迭代。如果OutputNetwork培训选项为“best-validation-loss”,最终的度量标准对应于验证损失最小的迭代。计算最终验证指标的迭代被标记最后在情节中。

如果您的网络包含批处理归一化层,则最终验证指标可能与训练期间评估的验证指标不同。这是因为在训练完成后,用于批量归一化的均值和方差统计值可能不同。例如,如果BatchNormalizationStatisics培训选项为“人口”,训练结束后,软件通过再次遍历训练数据完成批量归一化统计,并使用得到的均值和方差。如果BatchNormalizationStatisics培训选项为“移动”,然后软件在训练过程中使用运行估计来近似统计数据,并使用统计数据的最新值。

在右侧界面,可查看培训时间和设置信息。要了解有关培训选项的更多信息,请参见参数设置与卷积神经网络训练

单击,保存培训进度图出口培训地块在训练窗口。您可以将绘图保存为PNG、JPEG、TIFF或PDF文件。您还可以使用坐标轴工具栏保存损失、准确度和均方根误差的单个图。

训练过程中的进度

培训网络,并在培训过程中绘制培训进度图。

加载训练数据,其中包含5000张数字图像。留出1000个图像用于网络验证。

[XTrain,YTrain] = digitTrain4DArrayData;idx = randperm(size(XTrain,4),1000);XValidation = XTrain(:,:,:,idx);XTrain(:,:,:,idx) = [];YValidation = YTrain(idx);YTrain(idx) = [];

构造网络对数字图像数据进行分类。

图层= [imageInputLayer([28 28 1])卷积2dlayer(3,8,填充=“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,16,Padding=“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(2,Stride=2) convolution2dLayer(3,32,Padding=“相同”batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer];

指定网络培训选项。若要在训练期间定期验证网络,请指定验证数据。选择ValidationFrequency值,使网络大约每epoch验证一次。若要在训练期间绘制训练进度,请设置情节培训选项“训练进步”

选项= trainingOptions(“个”...MaxEpochs = 8,...ValidationData = {XValidation, YValidation},...ValidationFrequency = 30,...Verbose = false,...情节=“训练进步”);

培训网络。

net = trainNetwork(XTrain,YTrain,图层,选项);

{

另请参阅

|

相关的话题