Créer un réseau simple de classification d’image
Cet exemple montre comment créer et entraîner un réseau de neurones à convolution simple pour la classification Deep Learning. Les réseaux de neurones à convolution sont des outils essentiels pour le Deep Learning et conviennent parfaitement à la reconnaissance d'images.
Cet exemple illustre comment :
Charger des images.
Définir l’architecture du réseau.
Spécifier les options d’apprentissage.
Entraîner le réseau.
Prédire les étiquettes des nouvelles données et calculer la précision de la classification.
Vous trouverez un exemple illustrant comment créer et entraîner de manière interactive un réseau simple pour la classification d’images dans Démarrer avec la classification d’images.
Charger les données
Décompressez les exemples de données numériques et créez un datastore d’images. La fonction imageDatastore
étiquète automatiquement les images en fonction des noms de dossiers.
unzip("DigitsData.zip") imds = imageDatastore("DigitsData", ... IncludeSubfolders=true, ... LabelSource="foldernames");
Divisez les données en jeux de données d’apprentissage et de validation de sorte que chaque catégorie dans le jeu d’apprentissage contienne 750 images et que le jeu de validation contienne les images restantes pour chaque étiquette. splitEachLabel
divise le datastore d’images en deux nouveaux datastores de données pour l’apprentissage et la validation.
numTrainFiles = 750;
[imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,"randomized");
Affichez les noms des classes.
classNames = categories(imdsTrain.Labels)
classNames = 10x1 cell
{'0'}
{'1'}
{'2'}
{'3'}
{'4'}
{'5'}
{'6'}
{'7'}
{'8'}
{'9'}
Définir l’architecture du réseau
Définissez l’architecture du réseau de neurones à convolution. Spécifiez la taille des images dans la couche d’entrée du réseau et le nombre de classes dans la couche entièrement connectée. Chaque image est de taille 28 x 28 x 1 pixels et il y a 10 classes.
inputSize = [28 28 1]; numClasses = 10; layers = [ imageInputLayer(inputSize) convolution2dLayer(5,20) batchNormalizationLayer reluLayer fullyConnectedLayer(numClasses) softmaxLayer];
Pour plus d’informations sur les couches de Deep Learning, veuillez consulter List of Deep Learning Layers.
Spécifier les options d’apprentissage
Spécifiez les options d’apprentissage. Le choix des options nécessite une analyse empirique. Pour explorer différentes configurations dans les options d’apprentissage au cours de vos expérimentations, vous pouvez utiliser l’application Experiment Manager.
options = trainingOptions("sgdm", ... MaxEpochs=4, ... ValidationData=imdsValidation, ... ValidationFrequency=30, ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
Entraîner le réseau de neurones
Entraînez le réseau de neurones avec la fonction trainnet
. Pour la classification, utilisez la perte d’entropie croisée. Par défaut et selon disponibilité, la fonction trainnet
utilise un GPU. L’utilisation d’un GPU nécessite une licence Parallel Computing Toolbox™ et un dispositif GPU supporté. Pour plus d'information sur les dispositifs supportés, veuillez consulter GPU Computing Requirements (Parallel Computing Toolbox). Sinon, la fonction utilise le CPU. Pour spécifier l’environnement d’exécution, utilisez l’option d’apprentissage ExecutionEnvironment
.
net = trainnet(imdsTrain,layers,"crossentropy",options);
Tester le réseau de neurones
Pour tester le réseau de neurones, classez les données de validation et calculez la précision de la classification.
Réalisez des prédictions avec la fonction minibatchpredict
et convertissez les scores en étiquettes avec la fonction scores2label
. Par défaut et selon disponibilité, la fonction minibatchpredict
utilise un GPU.
scores = minibatchpredict(net,imdsValidation); YValidation = scores2label(scores,classNames);
Calculez la précision de la classification. La précision est le pourcentage d’étiquettes correctement prédites.
TValidation = imdsValidation.Labels; accuracy = mean(YValidation == TValidation)
accuracy = 0.9896
Pour poursuivre sur le Deep Learning, vous pouvez essayer d’utiliser un réseau préentraîné pour d’autres tâches. Résolvez de nouveaux problèmes de classification sur vos images avec l’apprentissage par transfert ou l’extraction de caractéristiques. Vous trouverez des exemples dans Start Deep Learning Faster Using Transfer Learning et Train Classifiers Using Features Extracted from Pretrained Networks. Pour en savoir plus sur les réseaux préentraînés, veuillez consulter Pretrained Deep Neural Networks.
Voir aussi
trainnet
| trainingOptions
| dlnetwork
Sujets associés
- Start Deep Learning Faster Using Transfer Learning
- Démarrer avec la classification d’images
- Essayer le Deep Learning en 10 lignes de code MATLAB
- Classer une image avec un réseau préentraîné
- En savoir plus sur l’apprentissage par transfert
- Prepare Network for Transfer Learning Using Deep Network Designer
- Get Started with Time Series Forecasting