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
trainingOptions
| Deep Network Designer
Temas relacionados
- Crear una red de clasificación de imágenes sencilla
- Empezar a usar deep learning rápidamente con la transferencia del aprendizaje
- Pruebe deep learning en 10 líneas de código de MATLAB
- Clasificar una imagen con una red preentrenada
- Introducción a la transferencia del aprendizaje
- Get Started with Time Series Forecasting