Main Content

Monitorizar el progreso del entrenamiento de deep learning

Este ejemplo muestra cómo monitorizar el proceso de entrenamiento en redes de deep learning.

Cuando entrena redes para deep learning, suele ser útil monitorizar el progreso de dicho entrenamiento. Representando varias métricas durante el proceso, puede comprobar cómo este progresa. Por ejemplo, puede determinar si la precisión de la red está mejorando y con qué rapidez, y si la red está empezando a sobreajustar los datos de entrenamiento.

En este ejemplo se muestra cómo monitorizar el progreso de entrenamiento para redes entrenadas usando la función trainNetwork. Para redes entrenadas con un bucle de entrenamiento personalizado, utilice un objeto trainingProgressMonitor para representar métricas durante el entrenamiento. Para obtener más información, consulte Monitor Custom Training Loop Progress.

Cuando establece la opción de entrenamiento Plots en "training-progress" para trainingOptions y comienza el entrenamiento de la red, trainNetwork crea una figura y muestra las métricas de entrenamiento en cada iteración. Cada iteración es una estimación del gradiente y una actualización de los parámetros de la red. Si se especifican los datos de validación en trainingOptions, la figura muestra las métricas de validación cada vez que trainNetwork valida la red. La figura representa lo siguiente:

  • Precisión del entrenamiento: precisión de la clasificación en cada minilote individual.

  • Precisión de entrenamiento suavizada: precisión de entrenamiento suavizada, que se obtiene aplicando un algoritmo de suavizado a la precisión del entrenamiento. Hay menos ruido que en la precisión sin suavizar, lo que facilita la detección de tendencias.

  • Precisión de validación: precisión de la clasificación en todo el conjunto de validación (se especifica mediante trainingOptions).

  • Pérdida de entrenamiento, pérdida de entrenamiento suavizada y pérdida de validación: la pérdida en cada minilote, su versión suavizada y la pérdida en el conjunto de validación, respectivamente. La capa final de la red es una classificationLayer, por lo que la función de pérdida es la pérdida de entropía cruzada. Para obtener más información sobre las funciones de pérdida para los problemas de regresión y clasificación, consulte Output Layers.

En el caso de las redes de regresión, la figura representa el error cuadrático medio raíz (RMSE) en lugar de la precisión.

La figura marca cada Época de entrenamiento con un fondo sombreado. Una época es una pasada completa por el conjunto de datos.

Durante el entrenamiento, puede detenerlo y devolver el estado actual de la red haciendo clic en el botón de stop de la esquina superior derecha. Por ejemplo, es posible que quiera dejar de entrenar cuando la precisión se estabilice y quede claro que no mejorará más. Una vez que haya hecho clic en el botón de stop, el entrenamiento podría tardar un poco antes de completarse. Una vez completado, trainNetwork devuelve la red entrenada.

Cuando finalice el entrenamiento, vea los Resultados que indican la precisión de validación finalizada y la razón por la que se ha finalizado el entrenamiento. Si la opción de entrenamiento OutputNetwork está en "last-iteration" (valor predeterminado), las métricas finalizadas corresponden a la última iteración de entrenamiento. Si la opción de entrenamiento OutputNetwork está en "best-validation-loss", las métricas finalizadas corresponden a la iteración con la pérdida de validación más baja. La iteración a partir de la cual se calculan las métricas de validación finales se etiqueta como Final en las gráficas.

Si la red contiene capas de normalización de lotes, la métrica de validación final puede ser diferente a la métrica de validación evaluada durante el entrenamiento. Esto se debe a que las estadísticas de la media y la varianza utilizadas para la normalización de lotes pueden diferir después de completar el entrenamiento. Por ejemplo, si la opción de entrenamiento BatchNormalizationStatisics está en "population", después del proceso, el software finaliza las estadísticas de normalización de lotes pasando por los datos de entrenamiento una vez más y utiliza la media y la varianza resultantes. Si la opción de entrenamiento BatchNormalizationStatisics está en "moving", el software aproxima las estadísticas durante el entrenamiento utilizando una estimación continua y utiliza los últimos valores de las estadísticas.

A la derecha, vea la información sobre el tiempo de entrenamiento y los ajustes. Para obtener más información sobre las opciones de entrenamiento, consulte Set Up Parameters and Train Convolutional Neural Network.

Para guardar la gráfica del progreso de entrenamiento, haga clic en Export Training Plot en la ventana del entrenamiento. Puede guardar la gráfica como archivo PNG, JEPG, TIFF o PDF. También puede guardar de forma individual las gráficas de pérdida, precisión y error cuadrático medio raíz con la barra de herramientas de los ejes.

Representar el progreso del entrenamiento durante el mismo

Entrene una red y represente el progreso de entrenamiento durante el mismo.

Cargue los datos de entrenamiento, que contienen 5000 imágenes de dígitos. Reserve 1000 de las imágenes para la validación de la red.

[XTrain,YTrain] = digitTrain4DArrayData;

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

Construya una red para clasificar los datos de las imágenes de los dígitos.

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
    classificationLayer];

Especifique opciones para el entrenamiento de la red. Para validar la red a intervalos regulares durante el entrenamiento, especifique los datos de validación. Elija el valor ValidationFrequency para que la red se valide alrededor de una vez por época. Para representar el progreso del entrenamiento durante el mismo, establezca la opción de entrenamiento Plots en "training-progress".

options = trainingOptions("sgdm", ...
    MaxEpochs=8, ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=30, ...
    Verbose=false, ...
    Plots="training-progress");

Entrene la red.

net = trainNetwork(XTrain,YTrain,layers,options);

{"String":"Figure Training Progress (24-Jul-2022 21:27:49) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.","Tex":[],"LaTex":[]}

Consulte también

|

Temas relacionados