Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

trainingOptions

Opciones para entrenar una red neuronal de deep learning

Descripción

ejemplo

options = trainingOptions(solverName) devuelve opciones de entrenamiento para el optimizador especificado por solverName. Para entrenar una red neuronal, use las opciones de entrenamiento como un argumento de entrada para la función trainNetwork.

ejemplo

options = trainingOptions(solverName,Name=Value) devuelve opciones de entrada con opciones adicionales especificadas por uno o más argumentos nombre-valor.

Ejemplos

contraer todo

Cree un conjunto de opciones para entrenar una red mediante gradiente descendente estocástico con momento. Reduzca la tasa de aprendizaje por un factor de 0.2 cada 5 épocas. Establezca el número máximo de épocas para entrenamiento en 20 y use un minilote con 64 observaciones en cada iteración. Active la gráfica de progreso del entrenamiento.

options = trainingOptions("sgdm", ...
    LearnRateSchedule="piecewise", ...
    LearnRateDropFactor=0.2, ...
    LearnRateDropPeriod=5, ...
    MaxEpochs=20, ...
    MiniBatchSize=64, ...
    Plots="training-progress")
options = 
  TrainingOptionsSGDM with properties:

                        Momentum: 0.9000
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                       MaxEpochs: 20
                   MiniBatchSize: 64
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Shuffle: 'once'
                  CheckpointPath: ''
             CheckpointFrequency: 1
         CheckpointFrequencyUnit: 'epoch'
            ExecutionEnvironment: 'auto'
                      WorkerLoad: []
                       OutputFcn: []
                           Plots: 'training-progress'
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
            DispatchInBackground: 0
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'population'
                   OutputNetwork: 'last-iteration'

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);

Figure Training Progress (03-Apr-2023 07:56:45) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

Argumentos de entrada

contraer todo

Solver para entrenar la red neuronal, especificado como una de las opciones siguientes:

  • 'sgdm': usar el optimizador de gradiente descendente estocástico con momento (SGDM). Puede especificar el valor de momento mediante la opción de entrenamiento Momentum.

  • 'rmsprop': usar el optimizador RMSProp. Puede especificar la tasa de decaimiento de la media móvil de gradiente cuadrado mediante la opción de entrenamiento SquaredGradientDecayFactor.

  • 'adam': usar el optimizador Adam. Puede especificar las tasas de decaimiento de la media móvil de gradiente y de gradiente cuadrado mediante las opciones de entrenamiento GradientDecayFactor y SquaredGradientDecayFactor, respectivamente.

Para obtener más información sobre los diferentes solvers, consulte Gradiente descendente estocástico.

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

En las versiones anteriores a la R2021a, use comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: InitialLearnRate=0.03,L2Regularization=0.0005,LearnRateSchedule="piecewise" especifica la tasa de aprendizaje principal como 0.03 y el factor de regularización L2 como 0.0005 y dirige instrucciones al software para que reduzca la tasa de aprendizaje cada cierto número de épocas multiplicándola por un determinado factor.

Gráficas y visualización

contraer todo

Gráficas que se desea visualizar durante el entrenamiento de red neuronal, especificadas como una de las opciones siguientes:

  • 'none': no visualizar gráficas durante el entrenamiento.

  • 'training-progress': representar el progreso del entrenamiento. La gráfica muestra información sobre la pérdida y la precisión de minilotes y la pérdida y la precisión de validación, así como información adicional sobre el progreso del entrenamiento. La gráfica incluye el botón de detención en la esquina superior derecha. Haga clic en el botón para detener el entrenamiento y devolver el estado actual de la red neuronal. Puede guardar la gráfica de entrenamiento como una imagen o PDF haciendo clic en Export Training Plot. Para obtener más información sobre la gráfica de progreso del entrenamiento, consulte Monitorizar el progreso del entrenamiento de deep learning.

Indicador para mostrar información sobre el progreso del entrenamiento en la ventana de comandos, especificado como 1 (verdadero) o 0 (falso).

La salida detallada muestra la siguiente información:

Redes neuronales de clasificación

CampoDescripción
EpochNúmero de épocas. Una época corresponde a una pasada completa de los datos.
IterationNúmero de iteraciones. Una iteración corresponde a un minilote.
Time ElapsedTiempo transcurrido en horas, minutos y segundos.
Mini-batch AccuracyPrecisión de clasificación en el minilote.
Validation AccuracyPrecisión de clasificación en los datos de validación. Si no especifica datos de validación, la función no muestra este campo.
Mini-batch LossPérdida en el minilote. Si la capa de salida es un objeto ClassificationOutputLayer, la pérdida es la pérdida de entropía cruzada para problemas de clasificación de varias clases con clases mutuamente excluyentes.
Validation LossPérdida en los datos de validación. Si la capa de salida es un objeto ClassificationOutputLayer, la pérdida es la pérdida de entropía cruzada para problemas de clasificación de varias clases con clases mutuamente excluyentes. Si no especifica datos de validación, la función no muestra este campo.
Base Learning RateTasa de aprendizaje base. El software multiplica los factores de tasa de aprendizaje de las capas por este valor.

Redes neuronales de regresión

CampoDescripción
EpochNúmero de épocas. Una época corresponde a una pasada completa de los datos.
IterationNúmero de iteraciones. Una iteración corresponde a un minilote.
Time ElapsedTiempo transcurrido en horas, minutos y segundos.
Mini-batch RMSEError cuadrático medio raíz (RMSE) en el minilote.
Validation RMSERMSE en los datos de validación. Si no especifica datos de validación, el software no muestra este campo.
Mini-batch LossPérdida en el minilote. Si la capa de salida es un objeto RegressionOutputLayer, la pérdida es el error cuadrático medio dividido.
Validation LossPérdida en los datos de validación. Si la capa de salida es un objeto RegressionOutputLayer, la pérdida es el error cuadrático medio dividido. Si no especifica datos de validación, el software no muestra este campo.
Base Learning RateTasa de aprendizaje base. El software multiplica los factores de tasa de aprendizaje de las capas por este valor.

Cuando el aprendizaje se detiene, la salida detallada muestra la razón de la detención.

Para especificar datos de validación, use la opción de entrenamiento ValidationData.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Frecuencia de la impresión detallada, que es el número de iteraciones entre cada impresión en la ventana de comandos, especificada como un entero positivo. Esta opción tiene efecto cuando la opción de entrenamiento Verbose es 1 (verdadero).

Si valida la red neuronal durante el entrenamiento, trainNetwork también imprime en la ventana de comandos cada vez que tiene lugar la validación.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opciones de minilote

contraer todo

Número máximo de épocas que desea usar para el entrenamiento, especificado como un entero positivo.

Una iteración es un paso dado en el algoritmo de gradiente descendente para minimizar la función de pérdida mediante un minilote. Una época es una pasada completa del algoritmo de entrenamiento a lo largo de todo el conjunto de entrenamiento.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Tamaño de minilote que desea usar para cada iteración de entrenamiento, especificado como un entero positivo. Un minilote es un subconjunto del conjunto de entrenamiento que se usa para evaluar el gradiente de la función de pérdida y actualizar los pesos.

Si el tamaño de minilote no divide el número de muestras de entrenamiento de manera uniforme, trainNetwork descarta los datos de entrenamiento que no caben en el minilote final completo de cada época.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opción para cambiar el orden de los datos, especificada como una de las siguientes opciones:

  • 'once': cambiar el orden de los datos de entrenamiento y validación una vez antes del entrenamiento.

  • 'never': no cambiar el orden de los datos.

  • 'every-epoch': cambiar el orden de los datos de entrenamiento antes de cada época de entrenamiento y cambiar el orden de los datos de validación antes de cada validación de la red neuronal. Si el tamaño de minilote no divide el número de muestras de entrenamiento de manera uniforme, trainNetwork descarta los datos de entrenamiento que no caben en el minilote final completo de cada época. Para evitar descartar los mismos datos cada época, establezca la opción de entrenamiento Shuffle en 'every-epoch'.

Validación

contraer todo

Datos que desea usar para la validación durante el entrenamiento, especificados como [], un almacén de datos, una tabla o un arreglo de celdas que contiene los predictores y respuestas de validación.

Puede especificar predictores y respuestas de validación mediante los mismos formatos compatibles con la función trainNetwork. Puede especificar los datos de validación como un almacén de datos, una tabla o el arreglo de celdas {predictors,responses}, donde predictors contiene los predictores de validación y responses contiene las respuestas de validación.

Para obtener más información, consulte los argumentos de entrada images, sequences y features de la función trainNetwork.

Durante el entrenamiento, trainNetwork calcula la precisión de validación y la pérdida de validación en los datos de validación. Para especificar la frecuencia de validación, use la opción de entrenamiento ValidationFrequency. También puede utilizar los datos de validación para detener el entrenamiento automáticamente cuando la pérdida de validación deje de disminuir. Para activar la detención automática de la validación, use la opción de entrenamiento ValidationPatience.

Si su red neuronal tiene capas que se comportan de forma diferente durante la predicción y durante el entrenamiento (por ejemplo, capas de abandono), la precisión de validación puede ser mayor que la precisión de entrenamiento (minilote).

Los datos de validación se cambian de orden de acuerdo con la opción de entrenamiento Shuffle. Si Shuffle es 'every-epoch', los datos de validación se cambian de orden antes de cada validación de la red neuronal.

Si ValidationData es [], el software no valida la red neuronal durante el entrenamiento.

Frecuencia de la validación de la red neuronal en número de iteraciones, especificada como un entero positivo.

El valor ValidationFrequency es el número de iteraciones entre evaluaciones de métricas de validación. Para especificar datos de validación, use la opción de entrenamiento ValidationData.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Paciencia de la detención de la validación del entrenamiento de red neuronal, especificada como un entero positivo o Inf.

ValidationPatience especifica el número de veces que la pérdida en el conjunto de validación puede ser mayor que o igual a la menor pérdida previa antes de que el entrenamiento de la red neuronal se detenga. Si ValidationPatience es Inf, los valores de la pérdida de validación no provocan que el entrenamiento se detenga antes de tiempo.

La red neuronal devuelta depende de la opción de entrenamiento OutputNetwork. Para devolver la red neuronal con la menor pérdida de validación, establezca la opción de entrenamiento OutputNetwork en "best-validation-loss".

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Red neuronal que se desea devolver cuando se completa el entrenamiento, especificada como una de las siguientes opciones:

  • 'last-iteration': devuelve la red neuronal correspondiente a la última iteración de entrenamiento.

  • 'best-validation-loss': devuelve la red neuronal correspondiente a la iteración de entrenamiento con la menor pérdida de validación. Para usar esta opción debe especificar la opción de entrenamiento ValidationData.

Opciones de solver

contraer todo

Tasa de aprendizaje inicial usada para el entrenamiento, especificada como un escalar positivo.

El valor predeterminado es 0.01 para el solver 'sgdm' y 0.001 para los solvers 'rmsprop' y 'adam'.

Si la tasa de aprendizaje es demasiado baja, el entrenamiento puede tardar mucho tiempo. Si la tasa de aprendizaje es demasiado alta, el entrenamiento podría lograr un resultado subóptimo o divergir.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opción para reducir la tasa de aprendizaje durante el entrenamiento, especificada como una de las siguientes opciones:

  • 'none': la tasa de aprendizaje se mantiene constante durante el entrenamiento.

  • 'piecewise': el software actualiza la tasa de aprendizaje cada cierto número de épocas multiplicándola por un determinado factor. Use la opción de entrenamiento LearnRateDropFactor para especificar el valor de este factor. Use la opción de entrenamiento LearnRateDropPeriod para especificar el número de épocas entre multiplicaciones.

Número de épocas para reducir la tasa de aprendizaje, especificado como un entero positivo. Esta opción es válida solo cuando la opción de entrenamiento LearnRateSchedule es 'piecewise'.

El software multiplica la tasa de aprendizaje global por el factor de reducción cada vez que pasa el número de épocas especificado. Especifique el factor de reducción mediante la opción de entrenamiento LearnRateDropFactor.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Factor para reducir la tasa de aprendizaje, especificado como un escalar de 0 a 1. Esta opción es válida solo cuando la opción de entrenamiento LearnRateSchedule es 'piecewise'.

LearnRateDropFactor es un factor multiplicativo para aplicar a la tasa de aprendizaje cada vez que pasa un determinado número de épocas. Especifique el número de épocas mediante la opción de entrenamiento LearnRateDropPeriod.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Factor para regularización L2 (decaimiento de peso), especificado como un escalar no negativo. Para obtener más información, consulte Regularización L2.

Puede especificar un multiplicador para la regularización L2 para capas de red neuronal con parámetros que se pueden aprender. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Contribución del paso de actualización de parámetros de la iteración previa a la iteración actual del gradiente descendente estocástico con momento, especificada como un escalar de 0 a 1.

Un valor de 0 indica que no hay contribución desde el paso previo, mientras que un valor de 1 indica una contribución máxima desde el paso previo. El valor predeterminado funciona bien para la mayoría de tareas.

Para especificar la opción de entrenamiento Momentum, solverName debe ser 'sgdm'.

Para obtener más información, consulte Gradiente descendente estocástico con momento.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Tasa de decaimiento de la media móvil de gradiente para el solver Adam, especificada como un escalar no negativo menor que 1. La tasa de decaimiento del gradiente está denotada por β1 en la sección Adam.

Para especificar la opción de entrenamiento GradientDecayFactor, solverName debe ser 'adam'.

El valor predeterminado funciona bien para la mayoría de tareas.

Para obtener más información, consulte Adam.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Tasa de decaimiento de la media móvil de gradiente cuadrado para los solvers Adam y RMSProp, especificada como un escalar no negativo menor que 1. La tasa de decaimiento del gradiente cuadrado está denotada por β2 en [4].

Para especificar la opción de entrenamiento SquaredGradientDecayFactor, solverName debe ser 'adam' o 'rmsprop'.

Valores típicos de la tasa de decaimiento son 0.9, 0.99 y 0.999, que corresponden a longitudes medias de 10, 100 y 1000 actualizaciones de parámetros, respectivamente.

El valor predeterminado es 0.999 para el solver Adam. El valor predeterminado es 0.9 para el solver RMSProp.

Para obtener más información, consulte Adam y RMSProp.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Desplazamiento del denominador para los solvers Adam y RMSProp, especificada como un escalar positivo.

El solver añade el desplazamiento al denominador en las actualizaciones de parámetros de la red neuronal para evitar una división por cero. El valor predeterminado funciona bien para la mayoría de tareas.

Para especificar la opción de entrenamiento Epsilon, solverName debe ser 'adam' o 'rmsprop'.

Para obtener más información, consulte Adam y RMSProp.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opción para restablecer la normalización de la capa de entrada, especificada como una de las siguientes opciones:

  • 1 (verdadero): restablecer las estadísticas de normalización de la capa de entrada y recalcularlas en el momento del entrenamiento.

  • 0 (falso): calcular las estadísticas de normalización en el momento del entrenamiento cuando están vacías.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Modo para evaluar estadísticas en capas de normalización de lotes, especificado como una de las siguientes opciones:

  • 'population': usar las estadísticas de población. Después del entrenamiento, el software finaliza las estadísticas pasando por los datos de entrenamiento una vez más y utiliza la media y la varianza resultantes.

  • 'moving': aproximar las estadísticas durante el entrenamiento utilizando una estimación continua dada por pasos de actualización

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    donde μ* y σ2* denotan la media y la varianza actualizadas, respectivamente, λμ y λσ2 denotan los valores de decaimiento de la media y la varianza, respectivamente, μ^ y σ2^ denotan la media y la varianza de la entrada de la capa, respectivamente, y μ y σ2 denotan los valores más recientes de los valores de media y varianza móviles, respectivamente. Después del entrenamiento, el software usa el valor más reciente de las estadísticas de media y varianza móviles. Esta opción solo es compatible con CPU y GPU única.

Recorte de gradiente

contraer todo

Umbral de gradiente, especificado como Inf o un escalar positivo. Si el gradiente supera el valor de GradientThreshold, este se recorta de acuerdo con la opción de entrenamiento GradientThresholdMethod.

Para obtener más información, consulte Recorte de gradiente.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Método de umbral de gradiente utilizado para recortar los valores de gradiente que superan el umbral de gradiente, especificado como una de las siguientes opciones:

  • 'l2norm': si la norma L2 del gradiente de un parámetro que se puede aprender es mayor que GradientThreshold, escalar el gradiente para que la norma L2 sea igual a GradientThreshold.

  • 'global-l2norm': si la norma L2 global, L, es mayor que GradientThreshold, escalar todos los gradientes por un factor de GradientThreshold/L. La norma L2 global considera todos los parámetros que se pueden aprender.

  • 'absolute-value': si el valor absoluto de una derivada parcial individual en el gradiente de un parámetro que se puede aprender es mayor que GradientThreshold, escala la derivada parcial para tener una magnitud igual a GradientThreshold y mantenga el signo de la derivada parcial.

Para obtener más información, consulte Recorte de gradiente.

Opciones de secuencia

contraer todo

Opción para rellenar, truncar o dividir secuencias de entrada, especificada como una de las siguientes opciones:

  • "longest": rellenar secuencias en cada minilote para tener la misma longitud que la secuencia más larga. Esta opción no descarta ningún dato, aunque el relleno puede introducir ruido a la red neuronal.

  • "shortest": truncar secuencias en cada minilote para tener la misma longitud que la secuencia más corta. Esta opción garantiza que no se añade relleno, a costa de descartar datos.

  • Entero positivo: para cada minilote, rellenar las secuencias hasta la longitud de la secuencia más larga del minilote y, después, dividir las secuencias en secuencias más pequeñas de la longitud especificada. Si se produce la división, el software crea minilotes adicionales. Si la longitud de secuencia especificada no divide uniformemente las longitudes de secuencia de los datos, entonces los minilotes que contienen las unidades de tiempo finales de las secuencias tienen una longitud más corta que la longitud de secuencia especificada. Utilice esta opción si las secuencias completas no caben en la memoria. Como alternativa, intente reducir el número de secuencias por minilote ajustando la opción MiniBatchSize a un valor inferior.

Para obtener más información sobre el efecto del relleno, el truncado y la división de las secuencias de entrada, consulte Relleno, truncamiento y división de secuencias.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

Dirección de relleno o truncado, especificada como una de las siguientes opciones:

  • "right": rellenar o truncar secuencias a la derecha. Las secuencias comienzan en la misma unidad de tiempo y el software trunca o añade relleno al final de las secuencias.

  • "left": rellenar o truncar secuencias a la izquierda. El software trunca o añade relleno al principio de las secuencias para que dichas secuencias finalicen en la misma unidad de tiempo.

Dado que las capas recurrentes procesan los datos secuenciales en una unidad de tiempo cada vez, cuando la propiedad OutputMode de la capa recurrente es 'last', cualquier relleno en las unidades de tiempo finales puede influir negativamente en la salida de la capa. Para rellenar o truncar datos secuenciales a la izquierda, establezca la opción SequencePaddingDirection en "left".

Para redes neuronales secuencia a secuencia (cuando la propiedad OutputMode es 'sequence' para cada capa recurrente), cualquier relleno en las primeras unidades de tiempo puede influir negativamente en las predicciones para unidades de tiempo anteriores. Para rellenar o truncar datos secuenciales a la derecha, establezca la opción SequencePaddingDirection en "right".

Para obtener más información sobre el efecto del relleno, el truncado y la división de las secuencias de entrada, consulte Relleno, truncamiento y división de secuencias.

Valor con el que rellenar secuencias de entrada, especificado como un escalar.

La opción solo es válida cuando SequenceLength es "longest" o un entero positivo. No rellene secuencias con NaN, porque haciéndolo se pueden propagar errores por la red neuronal.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Opciones de hardware

contraer todo

Recurso de hardware para entrenar red neuronal, especificado como una de las siguientes opciones:

  • 'auto': usar una GPU si hay alguna disponible. Si no, usar la CPU.

  • 'cpu': usar la CPU.

  • 'gpu': usar la GPU.

  • 'multi-gpu': usar varias GPU en una máquina, usando un grupo paralelo local basado en su perfil de cluster predeterminado. Si no hay grupo paralelo actual, el software inicia un grupo paralelo con un tamaño de grupo idéntico al número de GPU disponibles.

  • 'parallel': usar un grupo paralelo local o remoto basado en su perfil de cluster predeterminado. Si no hay grupo paralelo actual, el software inicia uno mediante el perfil de cluster predeterminado. Si el grupo tiene acceso a varias GPU, solo workers con una GPU única realizan el cálculo de entrenamiento. Si el grupo no tiene varias GPU, en su lugar el entrenamiento se realiza en todos los workers de las CPU disponibles.

Para obtener más información sobre cuándo utilizar los diferentes entornos de ejecución, consulte Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.

Las opciones 'gpu', 'multi-gpu' y 'parallel' requieren Parallel Computing Toolbox™. Para utilizar una GPU para deep learning, debe también disponer de un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Si elige una de estas opciones y Parallel Computing Toolbox o una GPU adecuada no está disponible, el software devuelve un error.

Para ver una mejora en el rendimiento durante el entrenamiento en paralelo, intente escalar las opciones de entrenamiento MiniBatchSize e InitialLearnRate en función del número de las GPU.

Las opciones 'multi-gpu' y 'parallel' no son compatibles con redes neuronales que contienen capas personalizadas con parámetros de estado o capas integradas que tienen estado en el momento del entrenamiento. Por ejemplo:

División de carga de workers paralelos entre las GPU o las CPU, especificada como una de las siguientes opciones:

  • Escalar de 0 a 1: fracción de workers en cada máquina que usar para el cálculo de entrenamiento de red neuronal. Si entrena la red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, los workers restantes buscan y preprocesan datos en segundo plano.

  • Entero positivo: número de workers en cada máquina que usar para el cálculo de entrenamiento de red neuronal. Si entrena la red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, los workers restantes buscan y preprocesan datos en segundo plano.

  • Vector numérico: carga de entrenamiento de red neuronal para cada worker del grupo paralelo. Para un vector W, el worker i recibe una fracción W(i)/sum(W) del trabajo (número de ejemplos por minilote). Si entrena una red neuronal usando datos de un almacén de datos de minilotes con distribución en segundo plano activada, puede asignar una carga de worker de 0 para usar ese worker para buscar datos en segundo plano. El vector especificado debe contener un valor por worker en el grupo paralelo.

Si el grupo paralelo tiene acceso a las GPU, los workers sin una GPU única no se utilizan nunca para el cálculo de entrenamiento. La opción predeterminada para grupos con varias GPU es usar todos los workers con una GPU única para el cálculo de entrenamiento y los workers restantes para la distribución en segundo plano. Si el grupo no tiene acceso a varias GPU y a varias CPU usadas para el entrenamiento, la opción predeterminada consiste en usar un worker por máquina para la distribución de datos en segundo plano.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Indicador para habilitar la distribución en segundo plano (cola de precarga asíncrona) para leer datos de entrenamiento de almacenes de datos, especificado como 0 (falso) o 1 (verdadero). La distribución en segundo plano requiere Parallel Computing Toolbox.

DispatchInBackground solo es compatible con almacenes de datos divisibles en particiones. Para obtener más información, consulte Use Datastore for Parallel Training and Background Dispatching.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Puntos de control

contraer todo

Ruta para guardar las redes neuronales de puntos de control, especificada como un vector de caracteres o escalar de cadena.

  • Si no especifica una ruta (es decir, si usa la opción predeterminada ""), el software no guarda ninguna red neuronal de puntos de control.

  • Si especifica una ruta, trainNetwork guarda las redes neuronales de puntos de control en esta ruta y asigna un nombre único a cada red neuronal. Después, puede cargar cualquier red neuronal de puntos de control y retomar el entrenamiento desde esa red neuronal.

    Si la carpeta no existe, deberá crearla antes de especificar la ruta para guardar las redes neuronales de puntos de control. Si la ruta que especifica no existe, trainingOptions devuelve un error.

Las opciones CheckpointFrequency y CheckpointFrequencyUnit especifican la frecuencia con la que se guardan redes neuronales de puntos de control.

Para obtener más información sobre cómo guardar puntos de control de redes neuronales, consulte Save Checkpoint Networks and Resume Training.

Tipos de datos: char | string

Frecuencia con la que se guardan redes neuronales de puntos de control, especificada como un entero positivo.

Si CheckpointFrequencyUnit es 'epoch', el software guarda las redes neuronales de puntos de control cada CheckpointFrequency épocas.

Si CheckpointFrequencyUnit es 'iteration', el software guarda las redes neuronales de puntos de control cada CheckpointFrequency iteraciones.

Esta opción tiene efecto cuando CheckpointPath no está vacío.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Unidad de frecuencia de punto de control, especificada como 'epoch' o 'iteration'.

Si CheckpointFrequencyUnit es 'epoch', el software guarda las redes neuronales de puntos de control cada CheckpointFrequency épocas.

Si CheckpointFrequencyUnit es 'iteration', el software guarda las redes neuronales de puntos de control cada CheckpointFrequency iteraciones.

Esta opción tiene efecto cuando CheckpointPath no está vacío.

Funciones de salida para llamar durante el entrenamiento, especificadas como identificador de función o arreglo de celdas de identificadores de función. trainNetwork llama a las funciones especificadas una vez antes del inicio del entrenamiento, después de cada iteración y una vez cuando el entrenamiento ha finalizado. trainNetwork pasa una estructura que contiene información en los siguientes campos:

CampoDescripción
EpochNúmero de época actual
IterationNúmero de iteración actual
TimeSinceStartTiempo en segundos desde el inicio del entrenamiento
TrainingLossPérdida actual de minilotes
ValidationLossPérdida en los datos de validación
BaseLearnRateTasa de aprendizaje base actual
TrainingAccuracy Precisión en el minilote actual (redes neuronales de clasificación)
TrainingRMSERMSE en el minilote actual (redes neuronales de regresión)
ValidationAccuracyPrecisión en los datos de validación (redes neuronales de clasificación)
ValidationRMSERMSE en los datos de validación (redes neuronales de regresión)
StateEstado de entrenamiento actual, con un posible valor de "start", "iteration" o "done".

Si un campo no se calcula o no es relevante para una determinada llamada a las funciones de salida, este contiene un arreglo vacío.

Puede utilizar las funciones de salida para mostrar o representar información de progreso o para detener el entrenamiento. Para detener el entrenamiento antes de tiempo, haga que su función de salida devuelva 1 (verdadero). Si cualquier función de salida devuelve 1 (verdadero), el entrenamiento finaliza y trainNetwork devuelve la red neuronal más reciente. Para ver un ejemplo de cómo utilizar funciones de salida, consulte Customize Output During Deep Learning Network Training.

Tipos de datos: function_handle | cell

Argumentos de salida

contraer todo

Opciones de entrenamiento, devueltas como un objeto TrainingOptionsSGDM, TrainingOptionsRMSProp o TrainingOptionsADAM. Para entrenar una red neuronal, use las opciones de entrenamiento como un argumento de entrada para la función trainNetwork.

Si solverName es 'sgdm', 'rmsprop' o 'adam', las opciones de entrenamiento se devuelven como un objeto TrainingOptionsSGDM, TrainingOptionsRMSProp o TrainingOptionsADAM, respectivamente.

Puede editar directamente las propiedades de la opción de entrenamiento de objetos TrainingOptionsSGDM, TrainingOptionsADAM y TrainingOptionsRMSProp. Por ejemplo, para cambiar el tamaño de minilote después de usar la función trainingOptions, puede editar la propiedad MiniBatchSize directamente:

options = trainingOptions('sgdm');
options.MiniBatchSize = 64;

Sugerencias

Algoritmos

contraer todo

Pesos y sesgos iniciales

Para capas convolucionales y totalmente conectadas, la inicialización para los pesos y los sesgos se indica mediante las propiedades WeightsInitializer y BiasInitializer de las capas, respectivamente. Para ver ejemplos de cómo cambiar la inicialización para los pesos y los sesgos, consulte Specify Initial Weights and Biases in Convolutional Layer y Specify Initial Weights and Biases in Fully Connected Layer.

Gradiente descendente estocástico

El algoritmo de gradiente descendente estándar actualiza los parámetros de red (pesos y sesgos) para minimizar la función de pérdida realizando pequeños pasos en cada iteración en la dirección del gradiente negativo de la pérdida,

θ+1=θαE(θ),

donde es el número de iteración, α>0 es la tasa de aprendizaje, θ es el vector de parámetros y E(θ) es la función de pérdida. En el algoritmo de gradiente descendente estándar, el gradiente de la función de pérdida, E(θ), se evalúa utilizando todo el conjunto de entrenamiento y el algoritmo de gradiente descendente estándar usa todo el conjunto de datos al mismo tiempo.

En cambio, en cada iteración el algoritmo de gradiente descendente estocástico evalúa el gradiente y actualiza los parámetros mediante un subconjunto de los datos de entrenamiento. En cada iteración se usa un subconjunto diferente, llamado minilote. La pasada completa del algoritmo de entrenamiento por todo el conjunto de entrenamiento usando minilotes es una época. El gradiente descendente estocástico es estocástico porque las actualizaciones de parámetros calculadas usando un minilote son una estimación con ruido de la actualización de parámetros que resultaría de usar el conjunto de datos completo. Puede especificar el tamaño de minilote y el número máximo de épocas mediante las opciones de entrenamiento MiniBatchSize y MaxEpochs, respectivamente.

Gradiente descendente estocástico con momento

El algoritmo de gradiente descendente estocástico puede oscilar por la ruta del descenso más pronunciado hacia el valor óptimo. Añadir un término de momento a la actualización de parámetros es una forma de reducir esta oscilación [2]. La actualización de gradiente descendente estocástico con momento (SGDM) es

θ+1=θαE(θ)+γ(θθ1),

donde γ determina la contribución del paso de gradiente previo a la iteración actual. Puede especificar este valor mediante la opción de entrenamiento Momentum. Para entrenar una red neuronal mediante el algoritmo de gradiente descendente estocástico con momento, especifique 'sgdm' como el primer argumento de entrada para trainingOptions. Para especificar el valor inicial de la tasa de aprendizaje α, use la opción de entrenamiento InitialLearnRate. También puede especificar tasas de aprendizaje diferentes para distintas capas y parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.

RMSProp

El gradiente descendente estocástico con momento usa una única tasa de aprendizaje para todos los parámetros. Otros algoritmos de optimización buscan mejorar el entrenamiento de red usando tasas de aprendizaje que difieren según el parámetro y pueden adaptarse automáticamente a la función de pérdida que se optimiza. RMSProp (propagación del valor cuadrático medio) es uno de estos algoritmos. Mantiene una media móvil de los cuadrados a nivel de elemento de los gradientes de parámetros,

v=β2v1+(1β2)[E(θ)]2

β2 es la tasa de decaimiento de la media móvil. Los valores comunes de la tasa de decaimiento son 0,9, 0,99 y 0,999. Las correspondientes longitudes medias de los gradientes cuadrados son iguales a 1/(1-β2), es decir, 10, 100 y 1000 actualizaciones de parámetros, respectivamente. Puede especificar β2 mediante la opción de entrenamiento SquaredGradientDecayFactor. El algoritmo RMSProp utiliza esta media móvil para normalizar las actualizaciones de cada parámetro individualmente,

θ+1=θαE(θ)v+ϵ

donde la división se realiza a nivel de elemento. Utilizando RMSProp se reducen de forma efectiva las tasas de aprendizaje de los parámetros con gradientes grandes y se incrementan las tasas de aprendizaje de los parámetros con gradientes pequeños. ɛ es una constante pequeña añadida para evitar la división entre cero. Puede especificar ɛ mediante la opción de entrenamiento Epsilon, pero el valor predeterminado normalmente funciona bien. Para usar RMSProp para entrenar una red neuronal, especifique 'rmsprop' como la primera entrada para trainingOptions.

Adam

Adam (derivado de estimación de momento adaptativo) [4] usa una actualización de parámetros que es similar a RMSProp, pero con un término de momento añadido. Mantiene una media móvil a nivel de elemento tanto de los gradientes de parámetros como de sus valores cuadrados,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

Puede especificar las tasas de decaimiento β1 y β2 mediante las opciones de entrenamiento GradientDecayFactor y SquaredGradientDecayFactor, respectivamente. Adam usa las medias móviles para actualizar los parámetros de red como

θ+1=θαmlvl+ϵ

Si los gradientes a lo largo de varias iteraciones son similares, utilizar una media móvil del gradiente permite a las actualizaciones de parámetros coger impulso en una determinada dimensión. Si los gradientes contienen principalmente ruido, la media móvil del gradiente se reduce, por lo que las actualizaciones de parámetros también se reducen. Puede especificar ɛ mediante la opción de entrenamiento Epsilon. El valor predeterminado normalmente funciona bien, pero para ciertos problemas, un valor tan grande como 1 funciona mejor. Para usar Adam para entrenar una red neuronal, especifique 'adam' como la primera entrada para trainingOptions. La actualización Adam completa incluye también un mecanismo para corregir un sesgo que aparece al principio del entrenamiento. Para obtener más información, consulte [4].

Especifique la tasa de aprendizaje α para todos los algoritmos de optimización mediante la opción de entrenamiento InitialLearnRate. El efecto de la tasa de aprendizaje es diferente para los distintos algoritmos de optimización, de modo que las tasas de aprendizaje también son distintas en general. También puede especificar tasas de aprendizaje diferentes según las capas y los parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.

Recorte de gradiente

Si los gradientes aumentan de magnitud exponencialmente, el entrenamiento es inestable y puede divergir en unas pocas iteraciones. Esta "explosión de gradiente" se indica por medio de una pérdida de entrenamiento que va a NaN o Inf. El recorte de gradiente ayuda a evitar la explosión de gradiente estabilizando el entrenamiento en tasas de aprendizaje mayores y en presencia de valores atípicos [3]. El recorte de gradiente permite entrenar las redes más rápidamente y normalmente no afecta a la precisión de la tarea aprendida.

Hay dos tipos de recorte de gradiente.

  • El recorte de gradiente basado en normas vuelve a escalar el gradiente en base a un umbral y no cambia la dirección del gradiente. Los valores 'l2norm' y 'global-l2norm' de GradientThresholdMethod son métodos de recorte de gradiente basados en normas.

  • El recorte de gradiente basado en valores acorta cualquier derivada parcial mayor que el umbral, lo que puede provocar que el gradiente cambie de dirección arbitrariamente. El recorte de gradiente basado en valores puede tener un comportamiento impredecible, pero los cambios suficientemente pequeños no hacen que la red diverja. El valor 'absolute-value' de GradientThresholdMethod es un método de recorte de gradiente basado en valores.

Regularización L2

Añadir un término de regularización para los pesos a la función de pérdida E(θ) es una forma de reducir el sobreajuste [1], [2]. El término de regularización también se llama decaimiento de peso. La función de pérdida con el término de regularización toma la forma

ER(θ)=E(θ)+λΩ(w),

donde w es el vector de peso, λ es el factor de regularización (coeficiente) y la función de regularización Ω(w) es

Ω(w)=12wTw.

Tenga en cuenta que los sesgos no están regularizados [2]. Puede especificar el factor de regularización λ mediante la opción de entrenamiento L2Regularization. También puede especificar factores de regularización diferentes para distintas capas y parámetros. Para obtener más información, consulte Set Up Parameters in Convolutional and Fully Connected Layers.

La función de pérdida que el software utiliza para el entrenamiento de red incluye el término de regularización. No obstante, el valor de pérdida mostrado en la ventana de comandos y la gráfica de progreso del entrenamiento durante el entrenamiento es solo la pérdida en los datos y no incluye el término de regularización.

Referencias

[1] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.

[2] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.

[3] Pascanu, R., T. Mikolov, and Y. Bengio. "On the difficulty of training recurrent neural networks". Proceedings of the 30th International Conference on Machine Learning. Vol. 28(3), 2013, pp. 1310–1318.

[4] Kingma, Diederik, and Jimmy Ba. "Adam: A method for stochastic optimization." arXiv preprint arXiv:1412.6980 (2014).

Historial de versiones

Introducido en R2016a

expandir todo