Main Content

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

Introducción a la transferencia del aprendizaje

Este ejemplo muestra cómo usar la transferencia del aprendizaje para volver a entrenar SqueezeNet, una red neuronal convolucional preentrenada, para clasificar un nuevo conjunto de imágenes. Pruebe este ejemplo para comprobar lo fácil que es dar sus primeros pasos en deep learning en MATLAB®.

Para hacer un recorrido visual por el ejemplo, vea el vídeo.

deep-network-designer-app.jpg

La transferencia del aprendizaje se suele usar en aplicaciones de deep learning. Se puede usar una red preentrenada como punto de partida para aprender una nueva tarea. Ajustar una red con transferencia del aprendizaje suele ser más rápido y fácil que entrenarla con pesos inicializados al azar de cero. Puede transferir de forma rápida las características aprendidas a una nueva tarea con menos imágenes de entrenamiento.

Extraer datos

En el espacio de trabajo, extraiga el conjunto de datos MathWorks Merch. Se trata de un conjunto de datos pequeño que contiene 75 imágenes de artículos promocionales de MathWorks que pertenecen a cinco clases distintas (gorra, cubo, naipes, destornillador y linterna).

unzip("MerchData.zip");

Cargar una red preentrenada

Abra Deep Network Designer.

deepNetworkDesigner

Seleccione SqueezeNet de la lista de redes preentrenadas y haga clic en Open.

Deep Network Designer muestra una vista alejada de la totalidad de la red.

Explore la gráfica de red. Para ampliarla con el ratón, utilice Ctrl + la rueda de desplazamiento. Para desplazarse, utilice las teclas de flecha o mantenga pulsada la rueda de desplazamiento y arrastre el ratón. Seleccione una capa para ver sus propiedades. Quite la selección de todas las capas para ver el resumen de la red en el panel Properties.

Importar datos

Para cargar los datos en Deep Network Designer, vaya a la pestaña Data y haga clic en Import Data > Import Image Classification Data.

En la lista Data source, seleccione Folder. Haga clic en Browse y seleccione la carpeta MerchData que ha extraído.

Divida los datos y asigne el 70% al entrenamiento y el 30% a la validación.

Especifique las operaciones de aumento que desea realizar en las imágenes de entrenamiento. El aumento de datos ayuda a evitar que la red se sobreajuste y memorice los detalles exactos de las imágenes de entrenamiento. Para este ejemplo, aplique una reflexión aleatoria en el eje x, una rotación aleatoria a partir del intervalo [-90,90] grados, y un reescalado aleatorio a partir del intervalo [1,2].

Haga clic en Import para importar los datos en Deep Network Designer.

Editar una red para la transferencia del aprendizaje

Para volver a entrenar SqueezeNet para clasificar nuevas imágenes, reemplace la última capa convolucional 2D y la última capa de clasificación de la red. En SqueezeNet, estas capas tienen el nombre 'conv10' y 'ClassificationLayer_predictions', respectivamente.

En el panel Designer, arrastre una nueva capa convolution2dLayer al lienzo. Para que coincida con la capa convolucional original, establezca FilterSize en 1,1. Edite NumFilters para que sea el número de clases del nuevo conjunto de datos (5 en este ejemplo).

Modifique las tasas de aprendizaje para aprender más rápido en la nueva capa que en las capas transferidas estableciendo los valores WeightLearnRateFactor y BiasLearnRateFactor en 10.

Elimine la última capa convolucional 2D y conecte en su lugar la nueva capa.

Sustituya la capa de salida. Desplácese hasta el final de la biblioteca Layer Library y arrastre una nueva capa classificationLayer al lienzo. Elimine la capa de salida original y conecte la capa nueva en su lugar.

Entrenar la red

Para elegir las opciones de entrenamiento, seleccione la pestaña Training y haga clic en Training Options. Para ralentizar el aprendizaje en las capas transferidas, establezca la tasa de aprendizaje inicial en un valor pequeño. En el paso anterior, aumentó los factores de la tasa de aprendizaje de la capa convolucional 2D para acelerar el aprendizaje en las nuevas capas finales. Esta combinación de ajustes de la tasa de aprendizaje da como resultado un aprendizaje rápido solo en las capas nuevas y un aprendizaje más lento en las demás.

Para este ejemplo, establezca InitialLearnRate en 0.0001, MaxEpochs en 8 y ValidationFrequency en 5. Dado que hay 55 observaciones, establezca MiniBatchSize en 11 para dividir los datos de entrenamiento de forma uniforme y asegúrese de que utiliza la totalidad del conjunto de entrenamiento durante cada uno de los números de época.

Para entrenar la red con las opciones de entrenamiento especificadas, haga clic en OK y, luego, en Train.

Deep Network Designer le permite visualizar y monitorizar el progreso del entrenamiento. Después, puede editar las opciones de entrenamiento y volver a entrenar la red si lo necesita.

Exportar resultados y generar código de MATLAB

Para exportar los resultados del entrenamiento, vaya a la pestaña Training y seleccione Export > Export Trained Network and Results. Deep Network Designer exporta la red entrenada como la variable trainedNetwork_1 y la información del entrenamiento como la variable trainInfoStruct_1.

También puede generar código de MATLAB, que recrea la red y las opciones de entrenamiento utilizadas. Vaya a la pestaña Training y seleccione Export > Generate Code for Training. Examine el código de MATLAB para aprender a preparar los datos de forma programática para el entrenamiento, a crear la arquitectura de red y a entrenar la red.

Clasificar una imagen nueva

Cargue una nueva imagen para clasificarla con la red entrenada.

I = imread("MerchDataTest.jpg");

Cambie el tamaño de la imagen de prueba de forma que coincida con el tamaño de entrada de la red.

I = imresize(I, [227 227]);

Clasifique la imagen de prueba con la red entrenada.

[YPred,probs] = classify(trainedNetwork_1,I);
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");

Referencias

[1] ImageNet. http://www.image-net.org

[2] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. "SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size." Preprint, submitted November 4, 2016. https://arxiv.org/abs/1602.07360.

[3] Iandola, Forrest N. "SqueezeNet." https://github.com/forresti/SqueezeNet.

Consulte también

| | |

Temas relacionados