Main Content

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.

DatosDescripción de la tareaMás información
ImágenesClasificació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 naturalesPruebe 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ánticaComputer 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ñalesClasificación secuencia a etiquetaPara ver un ejemplo, consulte Clasificación de secuencias mediante deep learning.
Clasificación y regresión secuencia a secuenciaPara 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 unoPara ver un ejemplo, consulte Regresión de secuencia a uno mediante deep learning.
Predicción de series de tiempoPara ver un ejemplo, consulte Pronóstico de series de tiempo mediante deep learning.
TextoClasificación y regresiónText 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 textoPara ver un ejemplo, consulte Generate Text Using Deep Learning.
AudioClasificació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.

ConsejoMás información
Monitorice el progreso del entrenamientoPara 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 ValidationData.

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 WeightLearnRateFactor de convolution2dLayer.

Disminuya la tasa de aprendizaje inicial utilizando la opción de entrenamiento InitialLearnRate.

Para la transferencia del aprendizaje, no es necesario entrenar durante tantas épocas. Disminuya el número de épocas mediante la opción de entrenamiento MaxEpochs.

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 Shuffle como "every-epoch".

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 solverName de la función trainingOptions.

Mejorar la precisión del entrenamiento

Si nota problemas durante el entrenamiento, considere estas posibles soluciones.

ProblemaPosibles soluciones
Valores NaN o picos grandes en la pérdida

Disminuya la tasa de aprendizaje inicial utilizando la opción de entrenamiento InitialLearnRate.

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

La pérdida sigue disminuyendo al final del entrenamientoAumente 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 LearnRateSchedule.

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:

  • Use el aumento de datos. Para obtener más información, consulte augmentedImageDatastore.

  • Use capas de abandono. Para obtener más información, consulte dropoutLayer.

  • Aumente el factor de regularización L2 global utilizando la opción de entrenamiento L2Regularization.

La pérdida disminuye muy lentamente

Aumente la tasa de aprendizaje inicial utilizando la opción de entrenamiento InitialLearnRate.

Para datos de imágenes, pruebe a incluir capas de normalización por lotes en su red. Para obtener más información, consulte batchNormalizationLayer.

Corregir errores en el entrenamiento

Si su red no se entrena de ninguna manera, considere estas posibles soluciones.

ErrorDescripciónPosibles soluciones
Errores de falta de memoria durante el entrenamientoEl 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 MiniBatchSize.

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 personalizadasPodría haber un problema con la implementación de la capa personalizada.

Compruebe la validez de la capa personalizada y busque posibles problemas mediante checkLayer.

Si una prueba falla al utilizar checkLayer, la función proporcionará un diagnóstico de la prueba y del marco. El diagnóstico de la prueba destaca cualquier problema de las capas, mientras que el diagnóstico del marco proporciona información más detallada. Para obtener más información sobre los diagnósticos de las pruebas y recibir sugerencias sobre posibles soluciones, consulte Diagnostics.

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 MiniBatchSize de trainingOptions.

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 TdrDelay de 2 segundos (valor predeterminado) a 4 segundos (requiere editar el registro).

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.

TareaMá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 augmentedImageDatastore. Por ejemplo, esta sintaxis cambia el tamaño de las imágenes en el almacén de datos de imágenes imds:

auimds = augmentedImageDatastore(inputSize,imds);

Sugerencia

Use augmentedImageDatastore para preprocesar eficiente de las imágenes para deep learning, incluyendo el cambio de tamaño de las imágenes. No use la opción ReadFcn de objetos ImageDatastore.

ImageDatastore permite leer lotes de archivos de imágenes JPG o PNG mediante precarga. Si establece la opción ReadFcn como una función personalizada, ImageDatastore no realiza la precarga y suele ser bastante más lenta.

Aumento de imágenes

Para evitar un sobreajuste, transforme las imágenes. Para obtener más información, consulte augmentedImageDatastore.

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.

TareaMá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 MiniBatchSize y SequenceLength de la función minibatchpredict.

Utilizar hardware disponible

Para especificar el entorno de ejecución, utilice la opción de entrenamiento ExecutionEnvironment.

ProblemaMás información
El entrenamiento en una CPU es lentoSi 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 ExecutionEnvironment en "cpu".

El software no utiliza todas las GPU disponiblesSi 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. 
es posible que la red del archivo MAT contenga capas que no estén disponibles. Esta situación podría deberse a los siguientes motivos:

  • 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

| | | | |

Temas relacionados