Main Content

recordMetrics

Record metric values for custom training loops

Since R2022b

    Description

    recordMetrics(monitor,step,metricName=metricValue) records the specified metric value in the training plot and the MetricData property of the TrainingProgressMonitor object monitor.

    example

    recordMetrics(monitor,step,metricName1=metricValue1,...,metricNameN=metricValueN) records values for multiple metrics.

    example

    recordMetrics(monitor,step,metricStructure) records the metric values specified by the structure metricStructure.

    example

    Examples

    collapse all

    Use a TrainingProgressMonitor object to track training progress and produce training plots for custom training loops.

    Create a TrainingProgressMonitor object. The monitor automatically tracks the start time and the elapsed time. The timer starts when you create the object.

    Tip

    To ensure that the elapsed time accurately reflects the training time, make sure you create the TrainingProgressMonitor object close to the start of your custom training loop.

    monitor = trainingProgressMonitor;

    Before you start the training, specify names for the information and metric values.

    monitor.Info = ["LearningRate","Epoch","Iteration"];
    monitor.Metrics = ["TrainingLoss","ValidationLoss","TrainingAccuracy","ValidationAccuracy"];

    Specify the horizontal axis label for the training plot. Group the training and validation loss in the same subplot. Group the training and validation accuracy in the same plot.

    monitor.XLabel = "Iteration";
    groupSubPlot(monitor,"Loss",["TrainingLoss","ValidationLoss"]);
    groupSubPlot(monitor,"Accuracy",["TrainingAccuracy","ValidationAccuracy"]);
    

    Specify a logarithmic scale for the loss. You can also switch the y-axis scale by clicking the log scale button in the axes toolbar.

    yscale(monitor,"Loss","log")

    During training:

    • Evaluate the Stop property at the start of each step in your custom training loop. When you click the Stop button in the Training Progress window, the Stop property changes to 1. Training stops if your training loop exits when the Stop property is 1.

    • Update the information values. The updated values appear in the Training Progress window.

    • Record the metric values. The recorded values appear in the training plot.

    • Update the training progress percentage based on the fraction of iterations completed.

    Note

    The following example code is a template. You must edit this training loop to compute your metric and information values. For a complete example that you can run in MATLAB, see Monitor Custom Training Loop Progress During Training.

    epoch = 0;
    iteration = 0;
    
    monitor.Status = "Running";
    
    while epoch < maxEpochs && ~monitor.Stop
        epoch = epoch + 1;
    
        while hasData(mbq) && ~monitor.Stop
            iteration = iteration + 1;
    
            % Add code to calculate metric and information values.
            % lossTrain = ...
    
           updateInfo(monitor, ...
                LearningRate=learnRate, ...
                Epoch=string(epoch) + " of " + string(maxEpochs), ...
                Iteration=string(iteration) + " of " + string(numIterations));
    
           recordMetrics(monitor,iteration, ...
                TrainingLoss=lossTrain, ...
                TrainingAccuracy=accuracyTrain, ...
                ValidationLoss=lossValidation, ...
                ValidationAccuracy=accuracyValidation);
    
            monitor.Progress = 100*iteration/numIterations;
        end
    end

    The Training Progress window shows animated plots of the metrics, as well as the information values, training progress bar, and elapsed time.

    Training Progress window. The first plot shows the training and validation loss and the second plot shows the training and validation accuracy.

    Use a structure to record metric values.

    structure.TrainingLoss = trainingLoss;
    structure.ValidationLoss = validationLoss;
    recordMetrics(monitor,iteration,structure);

    Input Arguments

    collapse all

    Training progress monitor, specified as a TrainingProgressMonitor object.

    Custom training loop step, such as the iteration or epoch number, specified as one of these values:

    • numeric scalar

    • dlarray object scalar

    • numeric vector (since R2026a)

    • dlarray object vector (since R2026a)

    The software uses the values in step as the x-coordinate values in the training plot.

    To specify multiple values simultaneously, specify step as a vector of values (since R2026a). Specifying multiple values simultaneously can help speed up the training process. If the steps argument value is a vector, then the values must be strictly increasing and the number of steps must match the number of metric values.

    Before R2026a: The step argument value must be scalar.

    The step values must be greater than the values already recorded in the monitor object.

    Metric name, specified as a string scalar or character vector. This input must be an element of the Metrics property of monitor.

    Data Types: char | string | cell

    Metric value, specified as one of these values:

    • numeric scalar

    • dlarray object scalar

    • numeric vector (since R2026a)

    • dlarray object vector (since R2026a)

    The software uses this value as the y-coordinate values in the training plot.

    To specify multiple values simultaneously, specify metricValue as a vector of values (since R2026a). Specifying multiple values simultaneously can help speed up the training process. If the metricValue argument value is a vector, then the number of metric values must match the number of steps.

    Before R2026a: The metricValue argument value must be scalar.

    Metric names and values, specified as a structure. Names must be elements of the Metrics property of monitor and can appear in any order in the structure.

    Example: struct(TrainingLoss=trainingLoss,ValidationLoss=validationLoss)

    Data Types: struct

    Tips

    • The information values appear in the Training Progress window and the training plot shows a record of the metric values. Use information values for text and for numerical values that you want to display in the training window but not in the training plot.

    • Use the groupSubPlot function to group multiple metrics in a single training subplot.

    • Because of the computation required to update graphics, updating the plot every iteration can slow down your training. To reduce the number of plot updates and speed up training, plot multiple values simultaneously by passing vectors of values to the step and metricValue arguments (since R2026a).

    Version History

    Introduced in R2022b

    expand all