Contenido principal

trainingOptions

Opciones para entrenar una red neuronal de deep learning

Descripción

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 trainnet.

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

ejemplo

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
                       MaxEpochs: 20
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                   MiniBatchSize: 64
                         Shuffle: 'once'
         CheckpointFrequencyUnit: 'epoch'
        PreprocessingEnvironment: 'serial'
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Metrics: []
             ObjectiveMetricName: 'loss'
            ExecutionEnvironment: 'auto'
                           Plots: 'training-progress'
                       OutputFcn: []
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
                InputDataFormats: "auto"
               TargetDataFormats: "auto"
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'auto'
                   OutputNetwork: 'auto'
                    Acceleration: "auto"
                  CheckpointPath: ''
             CheckpointFrequency: 1
        CategoricalInputEncoding: 'integer'
       CategoricalTargetEncoding: 'auto'
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf

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

Cuando entrena redes para deep learning, puede comprobar cómo progresa el entrenamiento representando varias métricas durante el proceso. 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 trainnet. 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, la función trainnet 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 trainnet valida la red. La figura representa la pérdida y cualquier métrica especificada por la opción nombre-valor Metrics. De manera predeterminada, el software utiliza una escala lineal para las gráficas. Para especificar una escala logarítmica para el eje y, seleccione el botón de escala logarítmica en la barra de herramientas de los ejes.

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. 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, trainnet devuelve la red entrenada.

Especifique la opción de entrenamiento OutputNetwork como "best-validation" para obtener valores finales que correspondan a la iteración con el mejor valor de métrica de validación, donde las opciones de entrenamiento ObjectiveMetricName especifican la métrica optimizada. Especifique la opción de entrenamiento OutputNetwork como "last-iteration" para obtener métricas finalizadas que correspondan a la última iteración de entrenamiento.

A la derecha del panel, vea la información sobre el tiempo de entrenamiento y los ajustes. Para obtener más información sobre las opciones de entrenamiento, consulte Configurar parámetros y entrenar una red neuronal convolucional.

Para guardar la gráfica del progreso de entrenamiento, haga clic en Export as Image 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 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 y de prueba de los archivos MAT DigitsDataTrain.mat y DigitsDataTest.mat, respectivamente. Cada conjunto de datos de entrenamiento y de prueba contiene 5000 imágenes.

load DigitsDataTrain.mat
load DigitsDataTest.mat

Cree un objeto dlnetwork.

net = dlnetwork;

Especifique las capas de la rama de clasificación y añádalas a la red.

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

Especifique opciones para el entrenamiento de la red. Para validar la red a intervalos regulares durante el entrenamiento, especifique los datos de validación. Registre los valores de las métricas de precisión y puntuación F. Para representar el progreso del entrenamiento durante el mismo, establezca la opción de entrenamiento Plots en "training-progress".

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

Entrene la red.

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

Utilice métricas para detener el entrenamiento antes de tiempo y devolver la mejor red.

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.

net = dlnetwork;

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

net = addLayers(net,layers);

Especifique las opciones de entrenamiento:

  • Usar un solver SGDM para el entrenamiento.

  • Monitorizar el rendimiento del entrenamiento especificando los datos de validación y la frecuencia de validación.

  • Hacer un seguimiento de la precisión y la recuperación durante el entrenamiento. Para devolver la red con el mejor valor de recuperación, especifique "recall" como métrica objetivo y establezca la red de salida como "best-validation".

  • Especificar la paciencia de validación como 5 para que el entrenamiento se detenga si la recuperación no ha disminuido durante cinco iteraciones.

  • Visualizar la gráfica de progreso del entrenamiento de la red.

  • Suprimir la salida detallada.

options = trainingOptions("sgdm", ...
    ValidationData={XValidation,YValidation}, ...
    ValidationFrequency=35, ...
    ValidationPatience=5, ...
    Metrics=["accuracy","recall"], ...
    ObjectiveMetricName="recall", ...
    OutputNetwork="best-validation", ...
    Plots="training-progress", ...
    Verbose=false);

Entrene la red.

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

Argumentos de entrada

contraer todo

Solver para entrenar la red neuronal, especificado como uno de estos valores:

La función trainBERTDocumentClassifier (Text Analytics Toolbox) solo admite los solvers "sgdm", "rmsprop" y "adam".

Argumentos de par nombre-valor

expandir todo

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: Plots="training-progress",Metrics="accuracy",Verbose=false especifica que se deshabilite la salida detallada y muestra el progreso del entrenamiento en una gráfica que también incluye la métrica de precisión.

Monitorización

expandir todo

Gráficas que se desea visualizar durante el entrenamiento de red neuronal, especificadas como uno de los valores siguientes:

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

  • "training-progress": representar el progreso del entrenamiento.

El contenido de la gráfica depende del solver que se use.

  • Cuando el argumento solverName es "sgdm", "adam" o "rmsprop", la gráfica muestra la pérdida de minilotes, la pérdida de validación, el minilote de entrenamiento y las métricas de validación especificadas por la opción Metrics, así como información adicional sobre el progreso del entrenamiento.

  • Cuando el argumento solverName es "lbfgs" o "lm", la gráfica muestra la pérdida de validación y entrenamiento, las métricas de validación y entrenamiento especificadas por la opción Metrics, así como información adicional sobre el progreso del entrenamiento.

Para abrir y cerrar de forma programática la gráfica del progreso del entrenamiento después del entrenamiento, use las funciones show y close con la segunda salida de la función trainnet. Puede usar la función show para ver el progreso del entrenamiento, incluso si la opción de entrenamiento Plots está especificada como "none".

Para cambiar la escala del eje y a logarítmica, utilice la barra de herramientas de los ejes. Training plot axes toolbar with log scale enabled and the tooltip "Log scale y-axis".

Para obtener más información sobre la gráfica, consulte Monitorizar el progreso del entrenamiento de deep learning.

Desde R2023b

Métricas para monitorizar, especificadas como uno de estos valores:

  • Nombre de métrica integrada o de la función de pérdida: especifique las métricas como un escalar de cadena, un vector de caracteres o un arreglo de celdas o un arreglo de cadena de uno o varios de estos nombres:

    • Métricas:

      • "accuracy": precisión (también conocida como precisión principal)

      • "auc": área bajo la curva ROC (AUC)

      • "fscore": puntuación F (también conocida como puntuación F1)

      • "precision": precisión

      • "recall": recuperación

      • "rmse": raíz del error cuadrático medio

      • "mape": error porcentual absoluto medio (MAPE) (desde R2024b)

      • "rsquared": R2 (R cuadrado o coeficiente de determinación) (desde R2025a)

    • Funciones de pérdida:

      • "crossentropy": pérdida de entropía cruzada para tareas de clasificación. (desde R2024b)

      • "indexcrossentropy": índice de pérdida de entropía cruzada para tareas de clasificación. (desde R2024b)

      • "binary-crossentropy": pérdida de entropía cruzada binaria para tareas de clasificación binarias y multietiqueta. (desde R2024b)

      • "mae" / "mean-absolute-error" / "l1loss": error medio absoluto para tareas de regresión. (desde R2024b)

      • "mse" / "mean-squared-error" / "l2loss": error cuadrático medio para tareas de regresión. (desde R2024b)

      • "huber": pérdida de Huber para tareas de regresión (desde R2024b)

    Tenga en cuenta que no se puede establecer la función de pérdida como "crossentropy" y especificar "index-crossentropy" como métrica ni establecer la función de pérdida como "index-crossentropy" y especificar "crossentropy" como métrica.

    Para obtener más información sobre las métricas de deep learning y las funciones de pérdida, consulte Deep Learning Metrics.

  • Objeto métrico integrado: si necesita más flexibilidad, puede usar objetos métricos integrados. El software admite estos objetos métricos integrados:

    Al crear un objeto métrico integrado, puede especificar opciones adicionales, como el tipo promediador y si la tarea es de una sola o de varias etiquetas.

  • Identificador de función métrica personalizada: si la métrica que necesita no es una métrica integrada, puede especificar métricas personalizadas mediante un identificador de función. La función debe tener la sintaxis metric = metricFunction(Y,T), donde Y corresponde a las predicciones de la red y T corresponde a las respuestas objetivo. Para redes con varias salidas, la sintaxis debe ser metric = metricFunction(Y1,…,YN,T1,…TM), donde N es el número de salidas y M es el número de objetivos. Para obtener más información, consulte Define Custom Metric Function.

    Nota

    Cuando tiene datos en minilotes, el software calcula la métrica para cada minilote y luego devuelve el promedio de esos valores. Para algunas métricas, este comportamiento puede dar como resultado un valor de métrica diferente que si calcula la métrica usando todo el conjunto de datos a la vez. En la mayoría de los casos, los valores son similares. Para usar una métrica personalizada que no sea un promedio por lotes para los datos, debe crear un objeto métrico personalizado. Para obtener más información, consulte Define Custom Deep Learning Metric Object.

  • Objeto deep.DifferentiableFunction (desde R2024a): objeto de función con una función de retropropagación personalizada. Para los objetivos categóricos, el software convierte automáticamente los valores categóricos en vectores codificados one-hot y los pasa a la función métrica. Para obtener más información, consulte Define Custom Deep Learning Operations.

  • Objeto métrico personalizado: si necesita mayor personalización, puede definir su propio objeto métrico personalizado. Para ver un ejemplo de cómo crear una métrica personalizada, consulte Define Custom Metric Object. Para obtener información general sobre la creación de métricas personalizadas, consulte Define Custom Deep Learning Metric Object.

Si especifica una métrica como un identificador de función, un objeto deep.DifferentiableFunction o un objeto métrico personalizado y entrena la red neuronal utilizando la función trainnet, la distribución de los objetivos que el software pasa a la métrica depende del tipo de datos de los objetivos y de la función de pérdida que especifique en la función trainnet y de las otras métricas que especifique:

  • Si los objetivos son arreglos numéricos, el software pasa los objetivos a la métrica directamente.

  • Si la función de pérdida es "index-crossentropy" y los objetivos son arreglos categóricos, el software convierte automáticamente los objetivos en índices de clase numéricos y los pasa a la métrica.

  • Para otras funciones de pérdida, si los objetivos son arreglos categóricos, el software convierte automáticamente los objetivos en vectores codificados one-hot y luego los pasa a la métrica.

Esta opción solo admite las funciones trainnet y trainBERTDocumentClassifier (Text Analytics Toolbox).

Ejemplo: Metrics=["accuracy","fscore"]

Ejemplo: Metrics={"accuracy",@myFunction,precisionObj}

Desde R2024a

Nombre de la métrica objetivo para su uso en la detención temprana y la devolución de la mejor red, especificado como escalar de cadena o vector de caracteres.

El nombre de la métrica debe ser "loss" o coincidir con el nombre de una métrica especificada por el argumento Metrics. Las métricas especificadas mediante identificadores de función no son compatibles. Para especificar el valor ObjectiveMetricName como el nombre de una métrica personalizada, el valor de la propiedad Maximize del objeto métrico personalizado no debe estar vacío. Para obtener más información, consulte Define Custom Deep Learning Metric Object.

Para obtener más información sobre la especificación de la métrica objetivo para la detención temprana, consulte ValidationPatience. Para obtener más información sobre la devolución de la mejor red mediante la métrica objetivo, consulte OutputNetwork.

Tipos de datos: char | string

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

El contenido de la salida detallada depende del tipo de solver.

Para los solvers estocásticos (SGDM, Adam y RMSProp), la tabla contiene estas variables:

VariableDescripción
IterationNúmero de iteraciones.
EpochNúmero de épocas.
TimeElapsedTiempo transcurrido en horas, minutos y segundos.
LearnRateTasa de aprendizaje.
TrainingLossPérdida de entrenamiento.
ValidationLossPérdida de validación. Si no especifica datos de validación, el software no muestra esta información.

Para los solvers por lotes (L-BFGS y LM), la tabla contiene estas variables:

VariableDescripción
IterationNúmero de iteraciones.
TimeElapsedTiempo transcurrido en horas, minutos y segundos.
TrainingLossPérdida de entrenamiento.
ValidationLossPérdida de validación. Si no especifica datos de validación, el software no muestra esta información.
GradientNormNorma de los gradientes.
StepNormNorma de los pasos.

Si especifica métricas adicionales en las opciones de entrenamiento, también aparecerán en la salida detallada. Por ejemplo, si configura la opción de entrenamiento Metrics como "accuracy", la información incluye las variables TrainingAccuracy y ValidationAccuracy.

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.

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

Para habilitar esta propiedad, establezca la opción de entrenamiento Verbose en 1 (true).

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

Funciones de salida a las que llamar durante el entrenamiento, especificadas como identificador de función o arreglo de celdas de identificadores de función. El software llama a las funciones una vez antes del inicio del entrenamiento, después de cada iteración y una vez cuando ha finalizado el entrenamiento.

Las funciones deben tener la sintaxis stopFlag = f(info), donde info es una estructura que contiene información sobre el progreso del entrenamiento y stopFlag es un escalar que indica que se debe detener el entrenamiento antes de tiempo. Si stopFlag es 1 (true), el software detiene el entrenamiento. En caso contrario, el software continúa el entrenamiento.

La función trainnet pasa a la función de salida la estructura info.

Para los solvers estocásticos (SGDM, Adam y RMSProp), info contiene estos campos:

CampoDescripción
EpochNúmero de épocas
IterationNúmero de iteraciones
TimeElapsedTiempo desde el inicio del entrenamiento
LearnRateTasa de aprendizaje de iteraciones
TrainingLossPérdida de entrenamiento de iteraciones
ValidationLossPérdida de validación, si se especifica y se evalúa en la iteración.
StateEstado de entrenamiento de iteraciones, especificado como "start", "iteration" o "done".

Para los solvers por lotes (L-BFGS y LM), info contiene estos campos:

CampoDescripción
IterationNúmero de iteraciones
TimeElapsedTiempo transcurrido en horas, minutos y segundos
TrainingLossPérdida de entrenamiento
ValidationLossPérdida de validación. Si no especifica datos de validación, el software no muestra esta información.
GradientNormNorma de los gradientes
StepNormNorma de los pasos
StateEstado de entrenamiento de iteraciones, especificado como "start", "iteration" o "done".

Si especifica métricas adicionales en las opciones de entrenamiento, también aparecerán en la información de entrenamiento. Por ejemplo, si configura la opción de entrenamiento Metrics como "accuracy", la información incluye los campos TrainingAccuracy y ValidationAccuracy.

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.

Para ver un ejemplo de cómo utilizar funciones de salida, consulte Custom Stopping Criteria for Deep Learning Training.

Tipos de datos: function_handle | cell

Disposición de datos

expandir todo

Desde R2025a

Codificación de entradas categóricas, especificada como uno de estos valores:

  • "integer": convierte entradas categóricas a su valor entero. En este caso, la red debe tener un canal de entrada para cada una de las entradas categóricas.

  • "one-hot": convierte entradas categóricas a vectores codificados one-hot. En este caso, la red debe tener numCategories canales para cada una de las entradas categóricas, en los que numCategories es el número de categorías de la entrada categórica correspondiente.

Desde R2025a

Codificación de objetivos categóricos, especificada como uno de estos valores:

  • "auto": si entrena con la función de pérdida "index-crossentropy", convierte objetivos categóricos a su valor entero. De lo contrario, convierte objetivos categóricos a vectores codificados one-hot.

  • "integer": convierte objetivos categóricos a su valor entero y pasa los valores de enteros codificados a las funciones de pérdida y métricas.

  • "one-hot": convierte objetivos categóricos a vectores codificados one-hot y pasa los valores codificados one-hot a las funciones de pérdida y métricas.

Desde R2023b

Descripción de las dimensiones de los datos de entrada, especificada como un arreglo de cadenas, un vector de caracteres o un arreglo de celdas de vectores de caracteres.

Si InputDataFormats es "auto", el software usa los formatos esperados por la entrada de red. De lo contrario, el software usa los formatos especificados para la entrada de red correspondiente.

Un formato de datos es una cadena de caracteres, en la que cada carácter describe el tipo de la dimensión de datos correspondiente.

Los caracteres son los siguientes:

  • "S": espacial

  • "C": canal

  • "B": lote

  • "T": tiempo

  • "U": sin especificar

Por ejemplo, considere un arreglo que representa un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede describir los datos como datos que tienen el formato "CBT" (canal, lote, tiempo).

Puede especificar varias dimensiones etiquetadas "S" o "U". Puede utilizar las etiquetas "C", "B" y "T" como máximo una vez cada una. El software ignora las dimensiones únicas "U" restantes tras la segunda dimensión.

Para redes neuronales con varias entradas net, especifique un arreglo de formatos de datos de entrada, donde InputDataFormats(i) corresponde a la entrada net.InputNames(i).

Para obtener más información, consulte Deep Learning Data Formats.

Tipos de datos: char | string | cell

Desde R2023b

Descripción de las dimensiones de los datos objetivo, especificada como uno de estos valores:

  • "auto": si los datos objetivo contienen el mismo número de dimensiones que los de entrada, la función trainnet usa el formato especificado por InputDataFormats. Si los datos objetivo contienen un número de dimensiones distinto que los de entrada, la función trainnet usa el formato esperado por la función de pérdida.

  • Arreglo de cadenas, vector de caracteres o arreglo de celdas de vectores de caracteres: la función trainnet usa los formatos de datos especificados.

Un formato de datos es una cadena de caracteres, en la que cada carácter describe el tipo de la dimensión de datos correspondiente.

Los caracteres son los siguientes:

  • "S": espacial

  • "C": canal

  • "B": lote

  • "T": tiempo

  • "U": sin especificar

Por ejemplo, considere un arreglo que representa un lote de secuencias, donde la primera, la segunda y la tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede describir los datos como datos que tienen el formato "CBT" (canal, lote, tiempo).

Puede especificar varias dimensiones etiquetadas "S" o "U". Puede utilizar las etiquetas "C", "B" y "T" como máximo una vez cada una. El software ignora las dimensiones únicas "U" restantes tras la segunda dimensión.

Para obtener más información, consulte Deep Learning Data Formats.

Tipos de datos: char | string | cell

Opciones de solvers estocásticos

expandir todo

Número máximo de épocas (pasos completos de los datos) que desea usar para el entrenamiento, especificado como un entero positivo.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

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, el software descarta los datos de entrenamiento que no caben en el minilote final completo de cada época. Si el tamaño de minilote es más pequeño que el número de muestras de entrenamiento, el software no descarta ningún dato.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Sugerencia

Para obtener el mejor rendimiento, si está entrenando una red usando un almacén de datos con una propiedad ReadSize, como imageDatastore, establezca la propiedad ReadSize y la opción de entrenamiento MiniBatchSize en el mismo valor. Si está entrenando una red usando un almacén de datos con una propiedad MiniBatchSize, como augmentedImageDatastore, establezca la propiedad MiniBatchSize del almacén de datos y la opción de entrenamiento MiniBatchSize en el mismo valor.

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

Opción para cambiar el orden de los datos, especificada como uno de estos valores:

  • "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, el software 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".

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

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

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.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Cuando solverName es "sgdm", el valor predeterminado es 0.01. Cuando solverName es "rmsprop" o "adam", el valor predeterminado es 0.001.

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

Programación de la tasa de aprendizaje, especificada como un vector de caracteres o escalar de cadena de una programación de la tasa de aprendizaje, un arreglo de cadena de nombres, un objeto de programación de la tasa de aprendizaje integrado o personalizado, un identificador de función o un arreglo de celdas de nombres, objetos métricos e identificadores de función.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Nombres de programación de la tasa de aprendizaje integrada

Especifique las programaciones de la tasa de aprendizaje como un escalar de cadena, un vector de caracteres o un arreglo de cadenas o de celdas de uno o más de estos nombres:

NombreDescripciónGráfica
"none"No hay ninguna programación de la tasa de aprendizaje. Esta programación mantiene la tasa de aprendizaje constante.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate is constant for each epoch.

"piecewise"Programación de la tasa de aprendizaje por partes. Esta programación reduce la tasa de aprendizaje por un factor de 10 cada 10 épocas.

Plot with x and y axes showing epoch and learning rate, respectively. Every 10 epochs, the learning rate drops by a factor of 10.

"warmup" (desde R2024b)Programación de la tasa de aprendizaje de calentamiento. Esta programación aumenta la tasa de aprendizaje hasta la tasa de aprendizaje base durante 5 iteraciones.

Plot with x and y axes showing epoch and learning rate, respectively. For 5 iterations, the learning rate ramps up to the base learning rate and then remains constant.

"polynomial" (desde R2024b)Programación de la tasa de aprendizaje polinómica. Esta programación reduce la tasa de aprendizaje utilizando una ley de potencia con un exponente unitario cada época.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases linearly from the base learning rate towards zero.

"exponential" (desde R2024b)Programación de la tasa de aprendizaje exponencial. Esta programación reduce la tasa de aprendizaje por un factor de 10 cada época.

Plot with x and y axes showing epoch and learning rate, respectively. Every epoch, the learning rate decays by a factor of 10.

"cosine" (desde R2024b)Programación de la tasa de aprendizaje del coseno. Esta programación reduce la tasa de aprendizaje mediante una fórmula de coseno cada época.

Plot with x and y axes showing epoch and learning rate, respectively. The learning rate decreases following a cosine curve from the base learning rate towards zero.

"cyclical" (desde R2024b)Programación de la tasa de aprendizaje cíclica. Esta programación aumenta la tasa de aprendizaje a partir de la tasa de aprendizaje base durante 5 épocas y, luego, disminuye la tasa de aprendizaje durante 5 épocas, a lo largo de periodos de 10 épocas.

Plot with x and y axes showing epoch and learning rate, respectively. For periods of 10 epochs, the learning rate increases from the base learning rate for 5 epochs and then decreases for 5 epochs.

Objeto de programación de la tasa de aprendizaje integrado (desde R2024b)

Si necesita más flexibilidad que la que ofrecen las opciones de cadena, puede utilizar objetos de programación de la tasa de aprendizaje integrados:

  • piecewiseLearnRate: un objeto de programación de la tasa de aprendizaje por partes disminuye la tasa de aprendizaje periódicamente multiplicándola por un factor especificado. Utilice este objeto para personalizar el factor y periodo de caída de la programación por partes.

    Antes de R2024b: Personalice el factor y periodo de caída por partes mediante las opciones de entrenamiento LearnRateDropFactor y LearnRateDropPeriod, respectivamente.

  • warmupLearnRate: un objeto de programación de la tasa de aprendizaje de calentamiento aumenta la tasa de aprendizaje durante un número especificado de iteraciones. Utilice este objeto para personalizar los factores de la tasa de aprendizaje inicial y final y el número de pasos de la programación de calentamiento.

  • polynomialLearnRate: un objeto de programación de la tasa de aprendizaje polinómica reduce la tasa de aprendizaje utilizando una ley de potencia. Utilice este objeto para personalizar los factores de la tasa de aprendizaje inicial y final, el exponente y el número de pasos de la programación polinómica.

  • exponentialLearnRate: un objeto de programación de la tasa de aprendizaje exponencial reduce la tasa de aprendizaje por un factor especificado. Utilice este objeto para personalizar el factor y periodo de caída de la programación exponencial.

  • cosineLearnRate: un objeto de programación de la tasa de aprendizaje de coseno reduce la tasa de aprendizaje utilizando una curva coseno e incorpora reinicios en caliente. Utilice este objeto para personalizar los factores de la tasa de aprendizaje inicial y final, el periodo y el factor de crecimiento del periodo de la programación de coseno.

  • cyclicalLearnRate: un objeto de programación de la tasa de aprendizaje cíclica aumenta y disminuye la tasa de aprendizaje de forma periódica. Utilice esta opción para personalizar el factor máximo, el periodo y la relación de paso de la programación cíclica.

Programación de la tasa de aprendizaje personalizada (desde R2024b)

Para mayor flexibilidad, puede definir una programación de la tasa de aprendizaje personalizada como un identificador de función o una clase personalizada que herede de deep.LearnRateSchedule.

  • Identificador de función de la programación de la tasa de aprendizaje: si la programación de la tasa de aprendizaje que necesita no es una programación de la tasa de aprendizaje integrada, puede especificar programaciones de la tasa de aprendizaje personalizadas mediante un identificador de función. Para especificar una programación personalizada, utilice un identificador de función con la sintaxis learningRate = f(baseLearningRate,epoch), donde baseLearningRate es la tasa de aprendizaje base y epoch es el número de época.

  • Objeto de programación de la tasa aprendizaje personalizada: si necesita más flexibilidad que la que proporcionan los identificadores de función, puede definir una clase de programación de la tasa de aprendizaje personalizada que herede de deep.LearnRateSchedule.

Programaciones de la tasa de aprendizaje múltiples (desde R2024b)

Puede combinar varias programaciones de la tasa de aprendizaje especificando varias programaciones como un arreglo de cadenas o de celdas y, después, el software aplica las programaciones en orden, empezando por el primer elemento. Solo puede ser infinita una de las programaciones (programaciones que continúan indefinidamente, como "cyclical" y objetos con la propiedad NumSteps establecida en Inf) y la programación infinita debe ser el último elemento del arreglo.

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.

Esta opción solo admite el solver SGDM (cuando el argumento solverName es "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 Estimación de momento adaptativo.

Esta opción solo admite el solver Adam (cuando el argumento solverName es "adam").

Para obtener más información, consulte Estimación de momento adaptativo.

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].

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.

Esta opción solo admite los solvers Adam y RMSProp (cuando el argumento solverName es "adam" o "rmsprop").

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 Estimación de momento adaptativo y Propagación del valor cuadrático medio.

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.

Esta opción solo admite los solvers Adam y RMSProp (cuando el argumento solverName es "adam" o "rmsprop").

Para obtener más información, consulte Estimación de momento adaptativo y Propagación del valor cuadrático medio.

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.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Sugerencia

Para personalizar la programación de la tasa de aprendizaje por partes, utilice un objeto piecewiseLearnRate. Se recomienda el uso de un objeto piecewiseLearnRate en lugar de las opciones de entrenamiento LearnRateDropFactor and LearnRateDropPeriod, ya que proporciona un control adicional sobre la frecuencia de caída. (desde R2024b)

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

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.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Sugerencia

Para personalizar la programación de la tasa de aprendizaje por partes, utilice un objeto piecewiseLearnRate. Se recomienda el uso de un objeto piecewiseLearnRate en lugar de las opciones de entrenamiento LearnRateDropFactor and LearnRateDropPeriod, ya que proporciona un control adicional sobre la frecuencia de caída. (desde R2024b)

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

Opciones de solver por lotes

expandir todo

Desde R2023b

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

El solver L-BFGS es un solver de lote completo, lo que significa que procesa el conjunto de entrenamiento completo en una única iteración.

Esta opción solo admite solvers por lotes (cuando el argumento solverName es "lbfgs" o "lm").

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

Desde R2023b

Tolerancia de gradiente relativo, especificada como un escalar positivo.

Tolerancia de gradiente relativo, especificada como uno de estos valores:

  • Escalar positivo: detiene el entrenamiento cuando el gradiente relativo es menor o igual que el valor especificado.

  • 0 (desde R2025a): no se detiene el entrenamiento según el gradiente relativo.

Esta opción solo admite solvers por lotes (cuando el argumento solverName es "lbfgs" o "lm").

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

Desde R2023b

Tolerancia de tamaño de paso, especificada como uno de estos valores:

  • Escalar positivo: detiene el entrenamiento cuando el paso que da el algoritmo es menor o igual que el valor especificado.

  • 0 (desde R2025a): no se detiene el entrenamiento según el tamaño de paso.

Esta opción solo admite solvers por lotes (cuando el argumento solverName es "lbfgs" o "lm").

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

Desde R2023b

Método para encontrar una tasa de aprendizaje adecuada, especificado como uno de estos valores:

  • "weak-wolfe": búsqueda de una tasa de aprendizaje que satisfaga las condiciones débiles de Wolfe. Este método mantiene una aproximación definida y positiva de la matriz hessiana inversa.

  • "strong-wolfe": búsqueda de una tasa de aprendizaje que satisfaga las condiciones fuertes de Wolfe. Este método mantiene una aproximación definida y positiva de la matriz hessiana inversa.

  • "backtracking": búsqueda de una tasa de aprendizaje que satisfaga las condiciones de disminución suficientes. Este método no mantiene una aproximación definida y positiva de la matriz hessiana inversa.

Esta opción solo admite el solver L-BFGS (cuando el argumento solverName es "lbfgs").

Desde R2023b

Número de actualizaciones de estado que se desea almacenar, especificado como un entero positivo. Los valores entre 3 y 20 son adecuados para la mayoría de tareas.

El algoritmo L-BFGS usa un historial de cálculos de gradientes para aproximar la matriz hessiana de forma recursiva. Para obtener más información, consulte Limited-Memory BFGS.

Esta opción solo admite el solver L-BFGS (cuando el argumento solverName es "lbfgs").

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

Desde R2023b

Valor inicial que caracteriza la matriz hessiana inversa aproximada, especificado como un escalar positivo.

Para ahorrar memoria, el algoritmo L-BFGS no almacena ni invierte la matriz hessiana densa B. En su lugar, el algoritmo usa la aproximación Bkm1λkI, donde m es el tamaño del historial, el factor hessiano inverso λk es un escalar e I es la matriz identidad. Después, el algoritmo almacena únicamente el factor hessiano inverso escalar. El algoritmo actualiza el factor hessiano inverso en cada paso.

El factor hessiano inverso inicial es el valor de λ0.

Para obtener más información, consulte Limited-Memory BFGS.

Esta opción solo admite el solver L-BFGS (cuando el argumento solverName es "lbfgs").

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

Desde R2023b

Número máximo de iteraciones de búsqueda lineal para determinar la tasa de aprendizaje, especificado como un entero positivo.

Esta opción solo admite el solver L-BFGS (cuando el argumento solverName es "lbfgs").

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

Desde R2024b

Tamaño de paso inicial, especificado como uno de estos valores:

  • []: no utiliza un tamaño de paso inicial para determinar la aproximación hessiana inicial.

  • "auto": determina el tamaño del paso inicial automáticamente. El software utiliza un tamaño de paso inicial de s0=12W0+0.1, donde W0 son los parámetros iniciales que se pueden aprender de la red.

  • Escalar real positivo: utiliza el valor especificado como tamaño de paso inicial s0.

Si InitialStepSize es "auto" o un escalar real positivo, el software aproxima la matriz hessiana inicial inversa usando λ0=s0J(W0), donde λ0 es el factor hessiano inverso inicial y J(W0) denota los gradientes de la pérdida con respecto a los parámetros que se pueden aprender iniciales. Para obtener más información, consulte BFGS de memoria limitada.

Esta opción solo admite el solver L-BFGS (cuando el argumento solverName es "lbfgs").

Desde R2024b

Factor de amortiguamiento inicial, especificado como un escalar positivo.

Esta opción solo admite el solver LM (cuando el argumento solverName es "lm").

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

Desde R2024b

Factor de amortiguamiento máximo, especificado como un escalar positivo.

Esta opción solo admite el solver LM (cuando el argumento solverName es "lm").

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

Desde R2024b

Factor de aumento del factor de amortiguación, especificado como un escalar positivo mayor que 1.

Esta opción solo admite el solver LM (cuando el argumento solverName es "lm").

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

Desde R2024b

Factor de disminución del factor de amortiguación, especificado como un escalar positivo menor que 1.

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

Validación

expandir todo

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

Durante el entrenamiento, el software usa los datos de validación para calcular la pérdida de validación y los valores métricos. 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 métrica objetivo de la validación deje de mejorar. De forma predeterminada, la métrica objetivo se establece como la pérdida. Para activar la detención automática de la validación, use la opción de entrenamiento ValidationPatience.

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

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 pérdida de validación puede ser menor que la pérdida de entrenamiento.

El software cambia los datos de validación de acuerdo con la opción de entrenamiento Shuffle. Si Shuffle es "every-epoch", el software cambia los datos de validación antes de cada validación de la red neuronal.

Los formatos admitidos dependen de la función de entrenamiento que se use.

Función trainnet

Especifique los datos de validación como un almacén de datos, una tabla, un objeto minibatchqueue o el arreglo de celdas {predictors,targets}, donde predictors contiene los predictores de validación y targets contiene los objetivos de validación. Especifique los valores de los predictores y objetivos de validación usando cualquiera de las disposiciones compatibles con la función trainnet.

Para obtener más información, consulte los argumentos de entrada de la función trainnet.

Función trainBERTDocumentClassifier (Text Analytics Toolbox)

Especifique los datos de validación como uno de estos valores:

  • Arreglo de celdas {documents,targets}, donde documents contiene los documentos de entrada y targets contiene las etiquetas de los documentos.

  • Tabla, donde la primera variable contiene los documentos de entrada y la segunda contiene las etiquetas de los documentos.

Para obtener más información, consulte los argumentos de entrada de la función trainBERTDocumentClassifier (Text Analytics Toolbox).

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 métrica objetivo del conjunto de validación puede ser peor que o igual al mejor valor anterior antes de que el entrenamiento de la red neuronal se detenga. Si ValidationPatience es Inf, los valores de la métrica de validación no hacen que el entrenamiento se detenga antes de tiempo. El software tiene como objetivo maximizar o minimizar la métrica, según lo especificado por la propiedad Maximize de la métrica. Cuando la métrica objetivo es "loss", el software tiene como objetivo minimizar el valor de pérdida.

La red neuronal devuelta depende de la opción de entrenamiento OutputNetwork. Para devolver la red neuronal con el mejor valor de métrica de validación, establezca la opción de entrenamiento OutputNetwork en "best-validation".

Antes de R2024a: El software calcula la paciencia de validación utilizando el valor de pérdida de validación.

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:

  • "auto": si se especifica ValidationData, utiliza "best-validation". En caso contrario, utiliza "last-iteration".

  • "best-validation": devuelve la red neuronal correspondiente a la iteración de entrenamiento con el mejor valor de métrica de validación, donde la métrica para optimizar se especifica mediante la opción ObjectiveMetricName. Para usar esta opción debe especificar la opción de entrenamiento ValidationData.

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

Regularización y normalización

expandir todo

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

Esta opción no admite el solver LM (cuando el argumento solverName es "lm").

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 (true): restablecer las estadísticas de normalización de la capa de entrada y recalcularlas en el momento del entrenamiento.

  • 0 (false): 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.

  • "auto": utilizar la opción "moving".

Recorte de gradiente

expandir 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.

Esta opción no admite el solver LM (cuando el argumento solverName es "lm").

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.

Esta opción no admite el solver LM (cuando el argumento solverName es "lm").

Secuencia

expandir todo

Opción para rellenar, truncar o dividir secuencias de entrada, especificada como uno de estos valores:

  • "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.

Para obtener más información sobre el efecto del relleno y el truncado de las secuencias, consulte Relleno y truncado 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 cada secuencia.

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

Las capas recurrentes procesan los datos secuenciales en una unidad de tiempo cada vez, por lo que 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 el argumento nombre-valor 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 el argumento nombre-valor SequencePaddingDirection en "right".

Para obtener más información sobre los efectos del relleno y el truncado de secuencias, consulte Relleno y truncado de secuencias.

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

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

Hardware y aceleración

expandir todo

Recurso de hardware para entrenar la red neuronal, especificado como uno de estos valores:

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

  • "cpu": usar la CPU local.

  • "gpu": usar la GPU local.

  • "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-auto": usar un grupo paralelo local o remoto. 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 los workers con una GPU única realizan el cálculo de entrenamiento y los workers sobrantes pasan a estar inactivos. Si el grupo no tiene varias GPU, en su lugar el entrenamiento se realiza en todos los workers de las CPU disponibles. (desde R2024a)

    Antes de R2024a: En su lugar, use "parallel".

  • "parallel-cpu": usar los recursos de la CPU en un grupo paralelo local o remoto, ignorando las GPU. Si no hay grupo paralelo actual, el software inicia uno mediante el perfil de cluster predeterminado. (desde R2023b)

  • "parallel-gpu": usar las GPU en un grupo paralelo local o remoto. Los workers sobrantes pasan a estar inactivos. Si no hay grupo paralelo actual, el software inicia uno mediante el perfil de cluster predeterminado. (desde R2023b)

Las opciones "gpu", "multi-gpu", , "parallel-auto", "parallel-cpu" y "parallel-gpu" 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 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.

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", , "parallel-auto", "parallel-cpu" y "parallel-gpu" solo admiten solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Desde R2024a

Entorno para buscar y preprocesar datos de un almacén de datos durante el entrenamiento, especificado como uno de estos valores:

  • "serial": buscar y preprocesar datos en serie.

  • "background": buscar y preprocesar datos usando el grupo de fondo.

  • "parallel": buscar y preprocesar datos usando workers paralelos. El software abre un grupo paralelo local usando el perfil predeterminado, si no hay ningún grupo local abierto actualmente. Los grupos paralelos no locales no son compatibles. Para usar esta opción se necesita Parallel Computing Toolbox. Esta opción no es compatible cuando se entrena en paralelo (cuando la opción ExecutionEnvironment es "parallel-auto", "parallel-cpu", "parallel-gpu" o "multi-gpu").

Para usar las opciones "background" o "parallel", el almacén de datos de entrada debe ser subconfigurable o divisible en particiones. Los almacenes de datos personalizados deben implementar la clase matlab.io.datastore.Subsettable.

Las opciones "background" y "parallel" no son compatibles cuando la opción Shuffle es "never".

Si utiliza las opciones "background" y "parallel", el entrenamiento no es determinista, aunque utilice la función deep.gpu.deterministicAlgorithms.

Utilice la opción "background" cuando sus minilotes necesiten un preprocesamiento sustancial. Si el preprocesamiento no es compatible con hilos, o si necesita controlar el número de workers, utilice la opción "parallel". Para obtener más información sobre el entorno de preprocesamiento, consulte Preprocess Data in the Background or in Parallel.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Antes de R2024a: Para preprocesar datos en paralelo, establezca la opción de entrenamiento DispatchInBackground en 1 (true).

Desde R2024a

Optimización del rendimiento, especificada como uno de estos valores:

  • "auto": aplica automáticamente un número de optimizaciones adecuado para la red de entrada y los recursos de hardware.

  • "none": deshabilita todas las optimizaciones.

El uso de la opción de aceleración "auto" puede ofrecer beneficios de rendimiento, pero a costa de un mayor tiempo de ejecución inicial. Las siguientes llamadas con parámetros compatibles son más rápidas. Utilice la optimización de rendimiento cuando planee llamar a la función varias veces con datos de entrada diferentes con el mismo tamaño y forma.

Puntos de control

expandir todo

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

  • 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, el software 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, el software devuelve un error.

Tipos de datos: char | string

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

Si solverName es "lbfgs" o CheckpointFrequencyUnit es "iteration", el software guarda las redes neuronales de puntos de control cada CheckpointFrequency iteraciones. De lo contrario, el software guarda las redes neuronales de puntos de control cada CheckpointFrequency épocas.

Cuando solverName es "sgdm", "adam" o "rmsprop", el valor predeterminado es 1. Cuando solverName es "lbfgs" o "lm", el valor predeterminado es 30.

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.

Esta opción solo admite solvers estocásticos (cuando el argumento solverName es "sgdm", "adam" o "rmsprop").

Argumentos de salida

contraer todo

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

Sugerencias

  • Para la mayor parte de las tareas de deep learning, puede utilizar una red neuronal preentrenada y adaptarla a sus propios datos. Para ver un ejemplo de cómo usar la transferencia del aprendizaje para volver a entrenar una red neuronal convolucional para clasificar un nuevo conjunto de imágenes, consulte Volver a entrenar redes neuronales para clasificar nuevas imágenes. Como alternativa, puede crear y entrenar redes neuronales desde cero usando las funciones trainnet y trainingOptions.

    Si la función trainingOptions no proporciona las opciones de entrenamiento que necesita para la tarea, puede crear un bucle de entrenamiento personalizado mediante diferenciación automática. Para obtener más información, consulte Entrenar una red con un bucle de entrenamiento personalizado.

    Si la función trainnet no proporciona la función de pérdida que necesita para la tarea, puede especificar una función de pérdida personalizada para trainnet como identificador de función. Para las funciones de pérdida que requieren más entradas que las predicciones y los objetivos (por ejemplo, funciones de pérdida que requieren acceso a la red neuronal o entradas adicionales), entrene el modelo usando un bucle de entrenamiento personalizado. Para obtener más información, consulte Entrenar una red con un bucle de entrenamiento personalizado.

    Si Deep Learning Toolbox™ no proporciona las capas que necesita para la tarea, puede crear una capa personalizada. Para obtener más información, consulte Definir capas de deep learning personalizadas. Para los modelos que no se pueden especificar como redes de capas, puede definir el modelo como una función. Para obtener más información, consulte Train Network Using Model Function.

    Para obtener más información sobre qué método de entrenamiento usar para cada tarea, consulte Train Deep Learning Model in MATLAB.

Algoritmos

contraer todo

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

[5] Liu, Dong C., and Jorge Nocedal. "On the limited memory BFGS method for large scale optimization." Mathematical programming 45, no. 1 (August 1989): 503-528. https://doi.org/10.1007/BF01589116.

[6] Marquardt, Donald W. “An Algorithm for Least-Squares Estimation of Nonlinear Parameters.” Journal of the Society for Industrial and Applied Mathematics 11, no. 2 (June 1963): 431–41. https://doi.org/10.1137/0111030.

Historial de versiones

Introducido en R2016a

expandir todo