Main Content

监控深度学习训练进度

此示例说明如何监控深度学习网络的训练进度。

当您为深度学习训练网络时,在训练期间绘制各种度量使您能够了解训练的进度情况。例如,您可以确定网络准确度是否改善以及改善速度,还可以确定网络是否开始过拟合训练数据。

此示例说明如何监控使用 trainnet 函数训练的网络的训练进度。如果您使用自定义训练循环来训练网络,请在训练过程中使用 trainingProgressMonitor 对象来绘制度量。有关详细信息,请参阅Monitor Custom Training Loop Progress

当您在 trainingOptions 中将 Plots 训练选项设置为 "training-progress" 并开始网络训练时,trainnet 函数会创建一个图窗并在每次迭代时显示训练度量。每次迭代都是对梯度的一次估计和对网络参数的一次更新。如果在 trainingOptions 中指定验证数据,则每次 trainnet 验证网络时,该图窗都会显示验证度量。该图窗绘制损失和由 Metrics 名称-值选项指定的任何度量。默认情况下,软件对绘图使用线性刻度。要对 y 轴指定对数刻度,请在坐标区工具栏中选择对数刻度按钮。

在训练过程中,您可以通过点击右上角的停止按钮停止训练并返回网络的当前状态。点击停止按钮后,可能需要一段时间以完成训练。训练完成后,trainnet 将返回经过训练的网络。

OutputNetwork 训练选项指定为 "best-validation",以获得与具有最佳验证度量值的迭代对应的最终值,其中优化的度量由 ObjectiveMetricName 训练选项指定。将 OutputNetwork 训练选项指定为 "last-iteration",以获得与上一次训练迭代对应的最终度量。

在窗格右侧,查看有关训练时间和设置的信息。要了解有关训练选项的详细信息,请参阅设置参数并训练卷积神经网络

要保存训练进度图,请在训练窗口中点击导出为图像。您可以将绘图保存为 PNG、JPEG、TIFF 或 PDF 文件。您也可以使用坐标区工具栏保存单个绘图。

在训练过程中绘制训练进度

训练网络并在训练过程中绘制训练进度。

分别从 MAT 文件 DigitsDataTrain.matDigitsDataTest.mat 中加载训练数据和测试数据。训练数据集和测试数据集各包含 5000 个图像。

load DigitsDataTrain.mat
load DigitsDataTest.mat

创建一个 dlnetwork 对象。

net = dlnetwork;

指定分类分支的层并将其添加到网络中。

layers = [
    imageInputLayer([28 28 1])
    convolution2dLayer(3,8,Padding="same")
    batchNormalizationLayer
    reluLayer   
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,16,Padding="same")
    batchNormalizationLayer
    reluLayer
    maxPooling2dLayer(2,Stride=2)
    convolution2dLayer(3,32,Padding="same")
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(10)
    softmaxLayer];

net = addLayers(net,layers);

指定网络训练的选项。要在训练过程中按固定时间间隔验证网络,请指定验证数据。记录准确度的度量值为 F 分数。要在训练期间绘制训练进度,请将 Plots 训练选项设置为 "training-progress"

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    Metrics = ["accuracy","fscore"], ...
    ValidationData={XTest,labelsTest}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

训练网络。

net = trainnet(XTrain,labelsTrain,net,"crossentropy",options);

另请参阅

| |

相关主题