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.

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
trainNetwork
| trainingOptions
| squeezenet
| Deep Network Designer
Temas relacionados
- Pruebe deep learning en 10 líneas de código de MATLAB
- Clasificar una imagen con una red preentrenada
- Transferencia del aprendizaje con Deep Network Designer
- Crear una red de clasificación de imágenes sencilla utilizando Deep Network Designer
- Crear una red de clasificación de imágenes sencilla
- Create Simple Sequence Classification Network Using Deep Network Designer
- Generate Experiment Using Deep Network Designer