Trucos y consejos de deep learning
En esta página se describen varias técnicas y opciones de entrenamiento para mejorar la precisión de las redes de deep learning. Para obtener información sobre cómo acelerar el entrenamiento de una red, consulte Speed Up Deep Neural Network Training.
Elegir la arquitectura de red
Una arquitectura de red adecuada depende de la tarea y de los datos que haya disponibles. Tenga en cuenta estas sugerencias a la hora de decidir qué arquitectura usar y cuándo escoger una red preentrenada o entrenarla desde cero.
Datos | Descripción de la tarea | Más información |
---|---|---|
Imágenes | Clasificación de imágenes naturales | Pruebe varias redes preentrenadas. Para obtener una lista de las redes de deep learning preentrenadas, consulte Redes neuronales profundas preentrenadas. Para saber cómo preparar de forma interactiva una red para la transferencia del aprendizaje mediante Deep Network Designer, consulte Preparar una red para la transferencia del aprendizaje mediante Deep Network Designer. |
Regresión de imágenes naturales | Pruebe varias redes preentrenadas. Para ver un ejemplo sobre cómo convertir una red de clasificación preentrenada en una red de regresión, consulte Convertir una red de clasificación en una red de regresión. | |
Clasificación y regresión de imágenes no naturales (por ejemplo, imágenes diminutas y espectrogramas) | Para ver un ejemplo sobre cómo clasificar imágenes diminutas, consulte Entrenar una red residual para clasificar imágenes. Para ver un ejemplo sobre cómo clasificar espectrogramas, consulte Train Speech Command Recognition Model Using Deep Learning. | |
Segmentación semántica | Computer Vision Toolbox™ proporciona herramientas para crear redes de deep learning para segmentación semántica. Para obtener más información, consulte Getting Started with Semantic Segmentation Using Deep Learning (Computer Vision Toolbox). | |
Secuencias, series de tiempo y señales | Clasificación secuencia a etiqueta | Para ver un ejemplo, consulte Clasificación de secuencias mediante deep learning. |
Clasificación y regresión secuencia a secuencia | Para obtener más información, consulte Clasificación secuencia a secuencia mediante deep learning y Regresión de secuencia a secuencia mediante deep learning. | |
Regresión de secuencia a uno | Para ver un ejemplo, consulte Regresión de secuencia a uno mediante deep learning. | |
Predicción de series de tiempo | Para ver un ejemplo, consulte Pronóstico de series de tiempo mediante deep learning. | |
Texto | Clasificación y regresión | Text Analytics Toolbox™ proporciona herramientas para crear redes de deep learning para datos de texto. Para ver un ejemplo, consulte Classify Text Data Using Deep Learning. |
Generación de texto | Para ver un ejemplo, consulte Generate Text Using Deep Learning. | |
Audio | Clasificación y regresión de audio | Pruebe varias redes preentrenadas. Para obtener una lista de las redes de deep learning preentrenadas, consulte Pretrained Models (Audio Toolbox). Para saber cómo preparar de forma programática una red para la transferencia del aprendizaje, consulte Transfer Learning with Pretrained Audio Networks (Audio Toolbox). Para saber cómo preparar de forma interactiva una red para la transferencia del aprendizaje mediante Deep Network Designer, consulte Adapt Pretrained Audio Network for New Data Using Deep Network Designer. Para ver un ejemplo sobre cómo clasificar sonidos mediante deep learning, consulte Classify Sound Using Deep Learning (Audio Toolbox). |
Elegir opciones de entrenamiento
La función trainingOptions
proporciona varias opciones para entrenar su red de deep learning.
Consejo | Más información |
---|---|
Monitorice el progreso del entrenamiento | Para activar la gráfica de progreso del entrenamiento, establezca la opción de entrenamiento Plots en "training-progress" . |
Utilice datos de validación | Para especificar datos de validación, use la opción de entrenamiento Nota Si su conjunto de datos de validación es demasiado pequeño y no es lo suficientemente representativo de los datos, las métricas generadas no le serán de ayuda. Si usa un conjunto de datos de validación demasiado grande, podría ralentizar el entrenamiento. |
Para la transferencia del aprendizaje, acelere el aprendizaje de nuevas capas y ralentícelo en las capas ya transferidas | Establezca factores de tasa de aprendizaje más altos en las capas nuevas utilizando, por ejemplo, la propiedad Disminuya la tasa de aprendizaje inicial utilizando la opción de entrenamiento Para la transferencia del aprendizaje, no es necesario entrenar durante tantas épocas. Disminuya el número de épocas mediante la opción de entrenamiento Para saber cómo preparar de forma interactiva una red para la transferencia del aprendizaje mediante Deep Network Designer, consulte Preparar una red para la transferencia del aprendizaje mediante Deep Network Designer. |
Cambie el orden de los datos en cada época | Para cambiar el orden de los datos en cada época (un pase completo de los datos), configure la opción de entrenamiento
Nota Para datos secuenciales, cambiar el orden puede repercutir negativamente en la precisión, ya que podría aumentar la cantidad de relleno o el número de datos truncados. Si tiene datos secuenciales, puede que resulte útil ordenarlos por longitud de secuencia. Para obtener más información, consulte Relleno y truncado de secuencias.
|
Pruebe diferentes optimizadores | Para especificar diferentes optimizadores, utilice el argumento |
Mejorar la precisión del entrenamiento
Si nota problemas durante el entrenamiento, considere estas posibles soluciones.
Problema | Posibles soluciones |
---|---|
Valores NaN o picos grandes en la pérdida | Disminuya la tasa de aprendizaje inicial utilizando la opción de entrenamiento Si disminuir la tasa de aprendizaje no sirve de ayuda, pruebe a usar recortes de gradiente. Para configurar el umbral del gradiente, utilice la opción de entrenamiento |
La pérdida sigue disminuyendo al final del entrenamiento | Aumente la duración del entrenamiento incrementando el número de épocas mediante la opción de entrenamiento MaxEpochs . |
Estancamiento de la pérdida | Si la pérdida se estanca en un valor inesperadamente elevado, reduzca la tasa de aprendizaje en ese estancamiento. Para cambiar la programación de la tasa de aprendizaje, use la opción de entrenamiento Si reducir la tasa de aprendizaje no sirve de ayuda, el modelo podría presentar un problema de subajuste. Pruebe a aumentar el número de parámetros o capas. Puede comprobar si el modelo presenta un subajuste monitorizando la pérdida de validación. |
La pérdida de validación es mucho mayor que la pérdida de entrenamiento | Para evitar el sobreajuste, pruebe una o varias de las siguientes opciones:
|
La pérdida disminuye muy lentamente | Aumente la tasa de aprendizaje inicial utilizando la opción de entrenamiento Para datos de imágenes, pruebe a incluir capas de normalización por lotes en su red. Para obtener más información, consulte |
Corregir errores en el entrenamiento
Si su red no se entrena de ninguna manera, considere estas posibles soluciones.
Error | Descripción | Posibles soluciones |
---|---|---|
Errores de falta de memoria durante el entrenamiento | El hardware disponible no puede almacenar el minilote actual, los pesos de la red o las activaciones calculadas. | Pruebe a reducir el tamaño del minilote utilizando la opción de entrenamiento Si esto no funciona, pruebe a usar una red más pequeña, ya sea reduciendo el número de capas o reduciendo el número de parámetros o filtros en las capas. |
Errores de capas personalizadas | Podría haber un problema con la implementación de la capa personalizada. | Compruebe la validez de la capa personalizada y busque posibles problemas mediante Si una prueba falla al utilizar |
El entrenamiento muestra el error 'CUDA_ERROR_UNKNOWN' | A veces, la GPU muestra este error cuando se está utilizando tanto para calcular como para mostrar solicitudes del sistema operativo. | Pruebe a reducir el tamaño del minilote utilizando la opción Si esto no funciona, en Windows®, pruebe a ajustar la configuración de TDR (detección y recuperación del tiempo de espera). Por ejemplo, cambie |
Puede analizar su red de deep learning mediante analyzeNetwork
. La función analyzeNetwork
muestra una visualización interactiva de la arquitectura de la red, detecta errores y problemas de la red y proporciona información detallada sobre sus capas. Utilice el analizador de red para visualizar y comprender la arquitectura de red, comprobar que ha definido correctamente la arquitectura y detectar problemas antes del entrenamiento. Entre los problemas que detecta analyzeNetwork
se incluyen capas perdidas o desconectadas, tamaños desajustados o incorrectos de las entradas de capas, número incorrecto de entradas de capa y estructuras de red no válidas.
Preparar y preprocesar datos
Puede mejorar la precisión preprocesando sus datos.
Peso o equilibrado de clases
Lo ideal sería que todas las clases tuviesen el mismo número de observaciones. Sin embargo, en algunas tareas, las clases pueden desequilibrarse. Por ejemplo, los conjuntos de datos de automoción de escenas callejeras suelen tener más píxeles de cielo, edificios y carreteras que de peatones y ciclistas, ya que el cielo, los edificios y las carreteras cubren una mayor parte de la imagen. Si no se gestiona correctamente, este desequilibrio podría perjudicar al proceso de aprendizaje, pues este está sesgado a favor de las clases dominantes.
En tareas de clasificación, puede especificar los pesos de las clases utilizando una función de pérdida personalizada en la función trainnet
. Para ver un ejemplo, consulte Train Sequence Classification Network Using Data With Imbalanced Classes.
También puede equilibrar las clases llevando a cabo una o varias de las siguientes opciones:
Añadir nuevas observaciones de las clases menos frecuentes.
Eliminar observaciones de las clases menos frecuentes.
Agrupar clases similares. Por ejemplo, agrupar las clases "coche" y "camión" en una única clase "vehículo".
Preprocesar datos de imágenes
Para obtener más información sobre el preprocesamiento de datos de imágenes, consulte Preprocesar imágenes para deep learning.
Tarea | Más información |
---|---|
Cambiar el tamaño de una imagen | Para utilizar una red preentrenada, debe cambiar el tamaño de las imágenes para que coincida con el tamaño de entrada de la red. Para cambiar el tamaño de una imagen, use auimds = augmentedImageDatastore(inputSize,imds); Sugerencia Use
|
Aumento de imágenes | Para evitar un sobreajuste, transforme las imágenes. Para obtener más información, consulte |
Normalizar objetivos de regresión | Normalice los predictores antes de introducirlos en la red. Si normaliza las respuestas antes del entrenamiento, debe transformar las predicciones de la red entrenada para obtener las de las respuestas originales. Para obtener más información, consulte Entrenar una red neuronal convolucional para regresión. |
Preprocesar datos secuenciales
Para obtener más información sobre redes de LSTM, consulte Redes neuronales de memoria de corto-largo plazo.
Tarea | Más información |
---|---|
Normalizar datos secuenciales | Para normalizar datos secuenciales, calcule primero la desviación media y estándar por característica de todas las secuencias. A continuación, en cada observación de entrenamiento, reste el valor de la media y divídala por la desviación estándar. Para obtener más información, consulte Normalizar datos secuenciales. |
Reducir el relleno y truncado de secuencias | Para reducir la cantidad de relleno o de datos descartados cuando rellene o trunque secuencias, pruebe a ordenar los datos por longitud de secuencia. Para obtener más información, consulte Relleno y truncado de secuencias. |
Especificar el tamaño de los minilotes y las opciones de relleno para predicciones | Al hacer predicciones con secuencias de diferentes tamaños, el tamaño de los minilotes puede influir en la cantidad de relleno que se añade a los datos de entrada, pudiendo dar como resultado valores predichos diferentes. Pruebe a utilizar valores distintos para ver cuál se adapta mejor a su red. Para especificar los tamaños de los minilotes y las opciones de relleno, utilice las opciones |
Utilizar hardware disponible
Para especificar el entorno de ejecución, utilice la opción de entrenamiento ExecutionEnvironment
.
Problema | Más información |
---|---|
El entrenamiento en una CPU es lento | Si el entrenamiento resulta muy lento en una única CPU, pruebe a usar una red de deep learning preentrenada como un extractor de características y entrene un modelo de machine learning. Para ver un ejemplo, consulte Extraer características de imágenes con una red preentrenada. |
El entrenamiento de LSTM en una GPU es lento | La CPU es más adecuada para entrenar una red LSTM usando minilotes con secuencias cortas. Para usar la CPU, establezca la opción de entrenamiento |
El software no utiliza todas las GPU disponibles | Si tiene acceso a una máquina con varias GPU, establezca la opción de entrenamiento ExecutionEnvironment en "multi-gpu" . Para obtener más información, consulte Deep Learning with MATLAB on Multiple GPUs. |
Para obtener más información, consulte Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud.
Corregir errores de carga de archivos MAT
Si no puede cargar capas o una red de un archivo MAT y le aparece el siguiente mensaje:
Warning: While loading an object of class 'dlnetwork': Error using dlnetwork/initialize Invalid network. Error in dlnetwork (line 160) net = initialize(net, dlX{:}); Error in dlnetwork.loadobj (line 748) net = dlnetwork(in.LayerGraph, exampleInputs{:}, 'Initialize', in.Initialized); Caused by: Layer 'layer': Error using the initialize function in layer sreluLayer. The function threw an error and could not be executed. Method 'initialize' is not defined for class 'sreluLayer' or is removed from MATLAB's search path.
El archivo contiene una capa personalizada que no está en la ruta. Para cargar redes que contengan capas personalizadas, añada los archivos de capas personalizadas a la ruta de MATLAB®.
El archivo contiene una capa personalizada de un paquete de soporte. Para cargar redes que utilicen capas de paquetes de soporte, instale el paquete de soporte necesario en la línea de comandos mediante la función correspondiente, como
imagePretrainedNetwork
, o utilizando Add-On Explorer.El archivo contiene una capa personalizada de un ejemplo de documentación que no está en la ruta. Para cargar redes que contengan capas personalizadas de ejemplos de documentación, abra el ejemplo como un script en vivo y copie la capa de la carpeta del ejemplo en su directorio de trabajo.
El archivo contiene una capa de una toolbox que no se ha instalado. Para acceder a capas de otras toolbox, por ejemplo de Computer Vision Toolbox o Text Analytics Toolbox, instale la toolbox correspondiente.
Una vez haya probado estas soluciones, vuelva a cargar el archivo MAT.
Consulte también
trainnet
| trainingOptions
| minibatchpredict
| checkLayer
| analyzeNetwork
| Deep Network Designer
Temas relacionados
- Example Deep Learning Networks Architectures
- Redes neuronales profundas preentrenadas
- Speed Up Deep Neural Network Training
- Preprocesar imágenes para deep learning
- Preparar una red para la transferencia del aprendizaje mediante Deep Network Designer
- Retrain Neural Network to Classify New Images
- Convertir una red de clasificación en una red de regresión