监控深度学习训练进度
此示例说明如何监控深度学习网络的训练进度。
当您为深度学习训练网络时,在训练期间绘制各种度量使您能够了解训练的进度情况。例如,您可以确定网络准确度是否改善以及改善速度,还可以确定网络是否开始过拟合训练数据。
此示例说明如何监控使用 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.mat
和 DigitsDataTest
.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);
另请参阅
trainnet
| trainingOptions
| dlnetwork