Main Content

Crear una red de clasificación de imágenes sencilla

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

Este ejemplo muestra cómo hacer lo siguiente:

  • Cargar los datos de imagen.

  • Definir la arquitectura de red.

  • Especificar las opciones de entrenamiento.

  • Entrenar la red.

  • Predecir las etiquetas de los datos nuevos y calcular la precisión de la clasificación.

Para ver un ejemplo de cómo crear y entrenar una red de clasificación de imágenes sencilla de forma interactiva, consulte Introducción a la clasificación de imágenes.

Cargar datos

Descomprima los datos de dígitos de muestra y cree un almacén de datos de imágenes. La función imageDatastore etiqueta automáticamente las imágenes en función de los nombres de carpeta.

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

Divida los datos en conjuntos de datos de entrenamiento y de validación, de forma que cada categoría del conjunto de entrenamiento contenga 750 imágenes, y el conjunto de validación contenga el resto de las imágenes de cada etiqueta. splitEachLabel divide el almacén de datos de imágenes en dos nuevos almacenes de datos para el entrenamiento y la validación.

numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomized");

Visualice los nombres de las clases.

classNames = categories(imdsTrain.Labels)
classNames = 10x1 cell
    {'0'}
    {'1'}
    {'2'}
    {'3'}
    {'4'}
    {'5'}
    {'6'}
    {'7'}
    {'8'}
    {'9'}

Definir la arquitectura de red

Defina la arquitectura de la red neuronal convolucional. Especifique el tamaño de las imágenes de la capa de entrada de la red y el número de clases de la capa totalmente conectada. Cada imagen contiene 28 por 28 por 1 píxeles, y hay 10 clases.

inputSize = [28 28 1];
numClasses = 10;

layers = [
    imageInputLayer(inputSize)
    convolution2dLayer(5,20)
    batchNormalizationLayer
    reluLayer
    fullyConnectedLayer(numClasses)
    softmaxLayer];

Para obtener más información sobre las capas de deep learning, consulte Lista de capas de deep learning.

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 redes neuronales

Entrene la red neuronal con la función trainnet. Para la clasificación, utilice la pérdida de entropía cruzada. De forma predeterminada, la función trainnet usa una GPU en caso de que esté disponible. Para utilizar una GPU se requiere una licencia de Parallel Computing Toolbox™ y un dispositivo GPU compatible. Para obtener información sobre los dispositivos compatibles, consulte GPU Computing Requirements (Parallel Computing Toolbox). De lo contrario, la función usa la CPU. Para especificar el entorno de ejecución, utilice la opción de entrenamiento ExecutionEnvironment.

net = trainnet(imdsTrain,layers,"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.9896

En los siguientes pasos de deep learning, podrá probar a usar la red preentrenada para otras tareas. Resuelva nuevos problemas de clasificación en los datos de imagen mediante la transferencia del aprendizaje o la extracción de características. Para ver ejemplos, consulte Empezar a usar deep learning rápidamente con la transferencia del aprendizaje y Entrenar clasificadores utilizando características extraídas de redes preentrenadas. Para obtener más información sobre las redes preentrenadas, consulte Redes neuronales profundas preentrenadas.

Consulte también

| |

Temas relacionados