TrainingOptionsLBFGS
Opciones de entrenamiento para el optimizador BFGS de memoria limitada (L-BFGS)
Desde R2023b
Descripción
Utilice un objeto TrainingOptionsLBFGS para establecer opciones de entrenamiento para el optimizador BFGS de memoria limitada (L-BFGS), incluido el método de búsqueda lineal y las tolerancias de gradiente y paso.
El algoritmo L-BFGS [1] es un método quasi-Newton que aproxima el algoritmo Broyden-Fletcher-Goldfarb-Shanno (BFGS). Utilice el algoritmo L-BFGS para redes pequeñas y conjuntos de datos que se pueden procesar en un solo lote.
Creación
Cree un objeto TrainingOptionsLBFGS utilizando la función trainingOptions y especificando "lbfgs" como el primer argumento de entrada.
Propiedades
L-BFGS
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.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
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.
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.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
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 , donde m es el tamaño del historial, el factor hessiano inverso 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 .
Para obtener más información, consulte Limited-Memory BFGS.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Número máximo de iteraciones de búsqueda lineal para determinar la tasa de aprendizaje, especificado como un entero positivo.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
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.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
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.
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 , 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 .
Si InitialStepSize es "auto" o un escalar real positivo, el software aproxima la matriz hessiana inicial inversa usando , donde λ0 es el factor hessiano inverso inicial y 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.
Disposición de datos
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 tenernumCategoriescanales para cada una de las entradas categóricas, en los quenumCategorieses 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.
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 una matriz que representa un lote de secuencias donde la primera, segunda y tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede describir los datos como si tuvieran 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
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óntrainnetusa el formato especificado porInputDataFormats. Si los datos objetivo contienen un número de dimensiones distinto que los de entrada, la funcióntrainnetusa 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
trainnetusa 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 una matriz que representa un lote de secuencias donde la primera, segunda y tercera dimensión corresponden a canales, observaciones y unidades de tiempo, respectivamente. Puede describir los datos como si tuvieran 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
Monitorización
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.
La gráfica muestra la pérdida de validación y entrenamiento, las métricas de validación y entrenamiento especificadas por la propiedad 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. 
Para obtener más información sobre la gráfica, consulte Monitorizar el progreso del entrenamiento de deep learning.
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:
MAPEMetric(desde R2024b)RSquaredMetric(desde R2025a)
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), dondeYcorresponde a las predicciones de la red yTcorresponde a las respuestas objetivo. Para redes con varias salidas, la sintaxis debe sermetric = metricFunction(Y1,…,YN,T1,…TM), dondeNes el número de salidas yMes el número de objetivos. Para obtener más información, consulte Define Custom Metric Function.Objeto
deep.DifferentiableFunction(desde R2024a): objeto de función con una función de retropropagación personalizada. 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. Especifique la métrica personalizada como la opción
Metricsde la funcióntrainingOptions.
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.
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).
Cuando esta propiedad es 1 (true), el software muestra esta información:
| Variable | Descripción |
|---|---|
Iteration | Número de iteraciones. |
TimeElapsed | Tiempo transcurrido en horas, minutos y segundos. |
TrainingLoss | Pérdida de entrenamiento. |
ValidationLoss | Pérdida de validación. Si no especifica datos de validación, el software no muestra esta información. |
GradientNorm | Norma de los gradientes. |
StepNorm | Norma 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.
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 que contiene estos campos:
| Campo | Descripción |
|---|---|
Iteration | Número de iteraciones |
TimeElapsed | Tiempo transcurrido en horas, minutos y segundos |
TrainingLoss | Pérdida de entrenamiento |
ValidationLoss | Pérdida de validación. Si no especifica datos de validación, el software no muestra esta información. |
GradientNorm | Norma de los gradientes |
StepNorm | Norma de los pasos |
State | Estado 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
Validación
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.
Si ValidationData es [], el software no valida la red neuronal durante el entrenamiento.
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.
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 especificaValidationData, 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ónObjectiveMetricName. Para usar esta opción debe especificar la opción de entrenamientoValidationData."last-iteration": devuelve la red neuronal correspondiente a la última iteración de entrenamiento.
Regularización y normalización
Factor para regularización L2 (decaimiento de peso), especificado como un escalar no negativo. Para obtener más información, consulte Regularización L2.
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, donde y denotan la media y la varianza actualizadas, respectivamente, y denotan los valores de decaimiento de la media y la varianza, respectivamente, y denotan la media y la varianza de la entrada de la capa, respectivamente, y y 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
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 queGradientThreshold, escalar el gradiente para que la norma L2 sea igual aGradientThreshold."global-l2norm": si la norma L2 global, L, es mayor queGradientThreshold, escalar todos los gradientes por un factor deGradientThreshold/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 queGradientThreshold, escala la derivada parcial para tener una magnitud igual aGradientThresholdy mantenga el signo de la derivada parcial.
Para obtener más información, consulte Recorte de gradiente.
Secuencia
Opción para rellenar o truncar secuencias de entrada, especificada como una de estas opciones:
"longest": rellenar secuencias para que tengan 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 para que tengan la misma longitud que la secuencia más corta. Esta opción garantiza que la función no añade relleno a costa de descartar datos.
Para obtener más información sobre los efectos del relleno y el truncado de secuencias de entrada, consulte Relleno y truncado de secuencias.
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 de secuencia 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
Recurso de hardware, especificado como uno de estos valores:
"auto": usar una GPU si hay alguna disponible. De lo contrario, usar la CPU."gpu": usar la GPU. Utilizar una GPU requiere una licencia de Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). Si no está disponible Parallel Computing Toolbox o una GPU adecuada, el software devuelve un error."cpu": usar la CPU.
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
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 en iteraciones, especificada como un entero positivo.
Esta opción tiene efecto cuando CheckpointPath no está vacío.
Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Ejemplos
Cree un conjunto de opciones para entrenar una red neuronal utilizando el optimizador L-BFGS:
Determine la tasa de aprendizaje usando el método de búsqueda lineal
"strong-wolfe".Detenga el entrenamiento cuando el gradiente relativo sea menor que o igual a
1e-5.Active la gráfica de progreso del entrenamiento.
options = trainingOptions("lbfgs", ... LineSearchMethod="strong-wolfe", ... GradientTolerance=1e-5, ... Plots="training-progress")
options =
TrainingOptionsLBFGS with properties:
HistorySize: 10
InitialInverseHessianFactor: 1
InitialStepSize: []
LineSearchMethod: 'strong-wolfe'
MaxNumLineSearchIterations: 20
MaxIterations: 1000
GradientTolerance: 1.0000e-05
StepTolerance: 1.0000e-05
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: 30
CategoricalInputEncoding: 'integer'
CategoricalTargetEncoding: 'auto'
L2Regularization: 1.0000e-04
GradientThresholdMethod: 'l2norm'
GradientThreshold: Inf
Algoritmos
El algoritmo L-BFGS [1] es un método quasi-Newton que aproxima el algoritmo Broyden-Fletcher-Goldfarb-Shanno (BFGS). Utilice el algoritmo L-BFGS para redes pequeñas y conjuntos de datos que se pueden procesar en un solo lote.
El algoritmo actualiza los parámetros que se pueden aprender W en la iteración k+1 usando el paso de actualización dado por
donde Wk denota los pesos en la iteración k, es la tasa de aprendizaje en la iteración k, Bk es una aproximación de la matriz hessiana en la iteración k y denota los gradientes de la pérdida con respecto a los parámetros que se pueden aprender en la iteración k.
El algoritmo L-BFGS calcula directamente el producto matriz-vector . El algoritmo no requiere calcular la inversa de Bk.
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 , donde m es el tamaño del historial, el factor hessiano inverso 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.
Para calcular el producto matriz-vector directamente, el algoritmo L-BFGS usa este algoritmo recursivo:
Se establece , donde m es el tamaño del historial.
Para :
Sea , donde y son las diferencias de paso y gradiente para la iteración , respectivamente.
Establezca , donde se deriva de , y los gradientes de la pérdida con respecto a la función de pérdida. Para obtener más información, consulte [1].
Se devuelve .
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 [2]. 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"deGradientThresholdMethodson 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"deGradientThresholdMethodes un método de recorte de gradiente basado en valores.
Añadir un término de regularización para los pesos a la función de pérdida es una forma de reducir el sobreajuste [3], [4]. 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
donde es el vector de peso, es el factor de regularización (coeficiente) y la función de regularización es
Tenga en cuenta que los sesgos no están regularizados [4]. Puede especificar el factor de regularización mediante la opción de entrenamiento L2Regularization. También puede especificar factores de regularización para capas individuales y parámetros que se pueden aprender usando la función setL2Factor.
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] 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.
[2] 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.
[3] Bishop, C. M. Pattern Recognition and Machine Learning. Springer, New York, NY, 2006.
[4] Murphy, K. P. Machine Learning: A Probabilistic Perspective. The MIT Press, Cambridge, Massachusetts, 2012.
Historial de versiones
Introducido en R2023bPara especificar cómo convertir entradas y objetivos categóricos a valores numéricos para entrenar una red neuronal, utilice los argumentos CategoricalInputEncoding y CategoricalTargetEncoding, respectivamente.
Para evitar que los valores de los gradientes relativos o el tamaño de paso detengan el entrenamiento cuando se usen los solvers L-BFGS o LM, establezca los argumentos GradientTolerance y StepTolerance de la función trainingOptions en 0, respectivamente.
Monitorice y represente la métrica R2 durante el entrenamiento.
Para utilizar esta métrica para la monitorización y la representación del comportamiento durante el entrenamiento, especifíquela con Metrics. Puede especificar "rsquared" o, si necesita mayor personalización, puede crear un objeto RSquaredMetric.
Utilice objetos métricos nuevos y actualizados durante el entrenamiento y la prueba de redes.
MAPEMetric: error porcentual absoluto medio (MAPE)AccuracyMetriccon la nueva opciónNumTopKClasses: precisión Top-kFScoreMetriccon la nueva opciónBeta: puntuación Fβ
También puede especificar directamente estos nuevos nombres de métricas integradas y de pérdidas:
"mape": error porcentual absoluto medio (MAPE)"crossentropy": pérdida de entropía cruzada"index-crossentropy": índice de pérdida de entropía cruzada"binary-crossentropy": pérdida de entropía cruzada binaria"mse"/"mean-squared-error"/"l2loss": error cuadrático medio"mae"/"mean-absolute-error"/"l1loss": error medio absoluto"huber": pérdida de Huber
Especifique el tamaño del paso inicial para el solver L-BFGS usando el argumento InitialStepSize.
Especifique los datos de validación como un objeto minibatchqueue mediante el argumento ValidationData.
Acelere el entrenamiento con la optimización automática del rendimiento. Cuando entrena una red mediante la función trainnet, la optimización automática del rendimiento se habilita de forma predeterminada. Puede deshabilitar la optimización del rendimiento estableciendo la opción Acceleration en "none" mediante la función trainingOptions.
Especifique las métricas como un objeto deep.DifferentiableFunction.
A partir de la versión R2024a, el valor predeterminado de la opción de entrenamiento OutputNetwork es "auto". Si ha especificado datos de validación, el software devuelve la red correspondiente al mejor valor de métrica de validación. Si no ha especificado datos de validación, el software devuelve la red correspondiente a la última iteración de entrenamiento. Si tiene datos de validación y desea replicar el valor predeterminado anterior, establezca OutputNetwork como "last-iteration".
Este cambio se aplica cuando se utilizan las opciones de entrenamiento únicamente con trainnet. Si está utilizando las opciones de entrenamiento con la función trainNetwork, entonces no hay ningún cambio en el comportamiento y, de forma predeterminada, el software devuelve la red correspondiente a la última iteración de entrenamiento.
No se recomienda especificar OutputNetwork como "best-validation-loss". Si tiene un código que establece OutputNetwork como "best-validation-loss", utilice "best-validation" en su lugar. El software devuelve la red correspondiente al mejor valor de métrica de validación según lo especificado por la opción ObjectiveMetricName. De forma predeterminada, el valor ObjectiveMetricName se establece como "loss". Este comportamiento se aplica cuando se utilizan las opciones de entrenamiento únicamente con la función trainnet.
Cuando utiliza las opciones de entrenamiento con la función trainNetwork, si especifica OutputNetwork como "best-validation", el software siempre devuelve la red con el mejor valor de pérdida de validación.
Consulte también
trainingOptions | trainnet | dlnetwork | analyzeNetwork | Deep Network Designer
Temas
- Entrenar una red neuronal con datos tabulares
- Resolver EDP usando una red neuronal informada por procesos físicos
- Crear una red neuronal de deep learning sencilla para clasificación
- Volver a entrenar redes neuronales para clasificar nuevas imágenes
- Resume Training from Checkpoint Network
- Deep learning con big data en CPU, GPU, en paralelo y en la nube
- Define Custom Training Loops, Loss Functions, and Networks
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)