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 Deep Network Designer

Este ejemplo muestra cómo usar Deep Network Designer para adaptar una red GoogLeNet preentrenada para clasificar un nuevo conjunto de imágenes. Este proceso se denomina transferencia del aprendizaje y suele ser mucho más rápido y fácil que entrenar una nueva red, ya que permite aplicar las características aprendidas a una nueva tarea con menos imágenes de entrenamiento. Para preparar una red para la transferencia del aprendizaje de forma interactiva, utilice Deep Network Designer.

Extraer datos para el entrenamiento

Descomprima los datos en el área de trabajo.

unzip('MerchData.zip');

Seleccionar una red preentrenada

Abra Deep Network Designer.

deepNetworkDesigner

Cargue una red GoogLeNet preentrenada seleccionándola en la página de inicio de Deep Network Designer. Si necesita descargar la red, haga clic en Install para abrir Add-On Explorer.

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.

Cargar un conjunto de 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.

El cuadro de diálogo también permite dividir los datos de validación desde la app. 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. 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.

Deep Network Designer permite realizar una inspección visual de la distribución de los datos de entrenamiento y los datos de validación en la pestaña Data. Puede ver que, en el caso de este ejemplo, hay cinco clases en el conjunto de datos. También puede visualizar observaciones aleatorias de cada clase.

Deep Network Designer cambia el tamaño de las imágenes durante el entrenamiento de forma que coincidan con el tamaño de entrada de la red. Para ver el tamaño de entrada de la red, vaya a la pestaña Designer y haga clic en imageInputLayer. El tamaño de entrada de la red es de 224 por 224.

Editar una red para la transferencia del aprendizaje

Para volver a entrenar una red preentrenada para clasificar nuevas imágenes, adapte la última capa de aprendizaje y la capa de clasificación final al nuevo conjunto de datos. En GoogLeNet, estas capas tienen el nombre 'loss3-classifier' y 'output', respectivamente.

En la pestaña Designer, haga clic en la última capa totalmente conectada, 'loss3-classifier'. En la parte inferior del panel Properties, haga clic en Unlock Layer. En el cuadro de advertencia que aparece, haga clic en Unlock Anyway. Se desbloquearán las propiedades de la capa para que pueda adaptarlas a su nueva tarea.

Antes de la versión R2023b: para editar las propiedades de la capa, remplace las capas en vez de desbloquearlas.

Establezca OutputSize en el número de clases de los nuevos datos. En este ejemplo, sería 5.

Edite las tasas de aprendizaje para aprender más rápido en las capas nuevas que en las capas transferidas. Establezca WeightLearnRateFactor y BiasLearnRateFactor en 10.

Seleccione la capa de clasificación, 'output', haga clic en Unlock Layer y, después, en Unlock Anyway. Para la capa de salida desbloqueada, no es necesario establecer OutputSize. En el momento del entrenamiento, Deep Network Designer establece de forma automática las clases de salida de la capa a partir de los datos.

Comprobar la red

Compruebe la red haciendo clic en Analyze. Si el analizador Deep Learning Network Analyzer no detecta ningún error, la red está preparada para el entrenamiento.

Entrenar la red

Para entrenar la red con la configuración predeterminada, vaya a la pestaña Training y haga clic en Train.

Si desea obtener un mayor grado de control sobre el entrenamiento, haga clic en Training Options y seleccione la configuración de entrenamiento. Las opciones de entrenamiento predeterminadas resultan más adecuadas para los conjuntos de datos de gran tamaño. Si dispone de un conjunto de datos más reducido, utilice valores más pequeños para el tamaño del minilote y la frecuencia de validación. Para obtener más información sobre cómo seleccionar las opciones de entrenamiento, consulte trainingOptions.

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 los resultados del entrenamiento

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.

Probar una red preentrenada

Seleccione 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, [224 224]);

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) + "%");

Para obtener más información sobre este tema, incluidas otras redes preentrenadas, consulte Deep Network Designer.

Consulte también

Temas relacionados