Main Content

Introducción a la clasificación de imágenes

Este ejemplo muestra cómo crear una red neuronal convolucional sencilla para la clasificación mediante deep learning utilizando la app Deep Network Designer. Las redes neuronales convolucionales son herramientas fundamentales en deep learning y resultan especialmente adecuadas para reconocer imágenes.

Cargar los datos de imagen

Cargue los datos de dígitos de muestra como un almacén de datos de imágenes. Para acceder a los datos, abra el ejemplo como un script en vivo. La función imageDatastore etiqueta automáticamente las imágenes en función de los nombres de carpeta. El conjunto de datos tiene 10 clases y cada imagen del conjunto de datos tiene un tamaño de 28 por 28 por 1 píxeles.

unzip("DigitsData.zip")

imds = imageDatastore("DigitsData", ...
    IncludeSubfolders=true, ...
    LabelSource="foldernames");

classNames = categories(imds.Labels);

Divida los datos en conjuntos de datos de entrenamiento, validación y prueba. Utilice el 70% de las imágenes para el entrenamiento, el 15% para la validación y el 15% para la prueba. Especifique "randomized" para asignar la proporción especificada de archivos de cada clase a los nuevos conjuntos de datos. La función splitEachLabel divide el almacén de datos de imágenes en tres nuevos almacenes de datos.

[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,0.7,0.15,0.15,"randomized");

Definir la arquitectura de red

Para crear la red, use la app Deep Network Designer.

deepNetworkDesigner

Si desea crear una red en blanco, deténgase en Blank Network y haga clic en New.

En el panel Designer, defina la arquitectura de la red neuronal convolucional. Arrastre capas de la Layer Library y conéctelas. Para buscar capas con rapidez, utilice el recuadro de búsqueda Filter layers del panel Layer Library. Para editar las propiedades de una capa, haga clic en la capa y edite los valores en el panel Properties.

Arrastre estas capas en orden y conéctelas de forma secuencial. En primer lugar, arrastre una imageInputLayer al lienzo y establezca InputSize en 28,28,1.

A continuación, arrastre estas capas al lienzo y conéctelas en orden:

  • convolution2dLayer

  • batchNormalizationLayer

  • reluLayer

A continuación, conecte una fullyConnectedLayer y establezca OutputSize en el número de clases de los datos; en este ejemplo serían 10.

Por último, añada una softmaxLayer.

Para comprobar que la red está preparada para el entrenamiento, haga clic en Analyze. Dado que el analizador Deep Learning Network Analyzer no detecta ningún error o advertencia, la red está preparada para el entrenamiento. Para exportar la red, haga clic en Export. La app guarda la red como la variable net_1.

Especificar las opciones de entrenamiento

Especifique las opciones de entrenamiento. Para escoger entre las opciones se requiere un análisis empírico. Para explorar diferentes configuraciones de opciones de entrenamiento mediante la ejecución de experimentos, puede utilizar la app Experiment Manager.

options = trainingOptions("sgdm", ...
    MaxEpochs=4, ...
    ValidationData=imdsValidation, ...
    ValidationFrequency=30, ...
    Plots="training-progress", ...
    Metrics="accuracy", ...
    Verbose=false);

Entrenar una red neuronal

Entrene la red neuronal con la función trainnet. Como el objetivo es la clasificación, use la pérdida de entropía cruzada.

net = trainnet(imdsTrain,net_1,"crossentropy",options);

Probar una red neuronal

Para probar la red neuronal, clasifique los datos de validación y calcule la precisión de la clasificación.

Realice predicciones con la función minibatchpredict y convierta las puntuaciones en etiquetas con la función scores2label. De forma predeterminada, la función minibatchpredict usa una GPU en caso de que esté disponible.

scores = minibatchpredict(net,imdsValidation);
YValidation = scores2label(scores,classNames);

Calcule la precisión de clasificación. La precisión es el porcentaje de etiquetas predichas correctamente.

TValidation = imdsValidation.Labels;
accuracy = mean(YValidation == TValidation)
accuracy = 0.9780

Visualice algunas de las predicciones.

numValidationObservations = numel(imdsValidation.Files);
idx = randi(numValidationObservations,9,1);

figure
tiledlayout("flow")
for i = 1:9
    nexttile
    img = readimage(imdsValidation,idx(i));
    imshow(img)
    title("Predicted Class: " + string(YValidation(idx(i))))
end

Para seguir avanzando en deep learning, puede probar a usar las redes preentrenadas y la transferencia del aprendizaje. Para ver un ejemplo, consulte Introducción a la transferencia del aprendizaje.

Consulte también

|

Temas relacionados