Main Content

Cette page s'applique à la version précédente. La page correspondante en anglais a été supprimée de la version actuelle.

Utiliser Deep Network Designer pour créer un réseau simple de classification de séquences

Cet exemple montre comment utiliser Deep Network Designer pour créer un réseau LSTM (long short-term memory) simple.

Vous pouvez utiliser un réseau LSTM pour entraîner un réseau de neurones profond à classer des données séquentielles. Un réseau LSTM est un type de réseau de neurones récurrent (RNN) qui apprend les dépendances à long terme entre chaque pas de temps des données séquentielles.

Cet exemple illustre comment :

  • Charger des données séquentielles.

  • Construire 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.

Charger les données

Chargez le jeu de données Japanese Vowels comme indiqué dans [1] et [2]. Les prédicteurs sont des cell arrays contenant des séquences de longueur variable, décrites par 12 caractéristiques. Les étiquettes sont des vecteurs catégoriels pour les étiquettes 1,2,...,9.

[XTrain,YTrain] = japaneseVowelsTrainData;
[XValidation,YValidation] = japaneseVowelsTestData;

Affichez les tailles des premières séquences d’apprentissage. Les séquences sont des matrices de 12 lignes (une ligne pour chaque caractéristique) et un nombre variable de colonnes (une colonne pour chaque pas de temps).

XTrain(1:5)
ans=5×1 cell array
    {12×20 double}
    {12×26 double}
    {12×22 double}
    {12×20 double}
    {12×21 double}

Définir l’architecture du réseau

Ouvrez Deep Network Designer.

deepNetworkDesigner

Arrêtez-vous sur Sequence-to-Label et cliquez sur Open. Cela permet d’ouvrir un réseau préconstruit adapté aux problèmes de classification de séquences.

Deep Network Designer affiche le réseau préconstruit.

Vous pouvez facilement adapter ce réseau de séquences pour le jeu de données Japanese Vowels.

Sélectionnez sequenceInputLayer et vérifiez que InputSize est défini à 12 pour correspondre à la dimension des caractéristiques.

Sélectionnez lstmLayer et définissez NumHiddenUnits à 100.

Sélectionnez fullyConnectedLayer et vérifiez que OutputSize est défini à 9, le nombre de classes.

Vérifier l’architecture du réseau

Pour vérifier le réseau et examiner les détails des couches, cliquez sur Analyze.

Exporter l’architecture du réseau

Pour exporter l’architecture du réseau dans l’espace de travail, dans l’onglet Designer, cliquez sur Export. Deep Network Designer enregistre le réseau sous la variable layers_1.

Vous pouvez également générer du code pour construire l’architecture du réseau en sélectionnant Export > Generate Code.

Entraîner le réseau

Spécifiez les options d’apprentissage et entraînez le réseau.

Comme les mini-batches sont petits avec des séquences courtes, l'utilisation du CPU convient mieux à l’apprentissage. Indiquez 'ExecutionEnvironment' à 'cpu'. Si un GPU est disponible, vous pouvez réaliser l'apprentissage en définissant 'ExecutionEnvironment' sur 'auto' (la valeur par défaut).

miniBatchSize = 27;
options = trainingOptions('adam', ...
    'ExecutionEnvironment','cpu', ...
    'MaxEpochs',100, ...
    'MiniBatchSize',miniBatchSize, ...
    'ValidationData',{XValidation,YValidation}, ...
    'GradientThreshold',2, ...
    'Shuffle','every-epoch', ...
    'Verbose',false, ...
    'Plots','training-progress');

Entraînez le réseau.

net = trainNetwork(XTrain,YTrain,layers_1,options);

Vous pouvez également entraîner ce réseau avec Deep Network Designer et des objets du datastore. Pour un exemple illustrant comment entraîner un réseau de régression de séquence à séquence dans Deep Network Designer, veuillez consulter Build Time Series Forecasting Network Using Deep Network Designer.

Tester le réseau

Classez les données de test et calculez la précision de la classification. Spécifiez la même taille de mini-batch que pour l’apprentissage.

YPred = classify(net,XValidation,'MiniBatchSize',miniBatchSize);
acc = mean(YPred == YValidation)
acc = 0.9405

Pour poursuivre, vous pouvez essayer d’améliorer la précision en utilisant les couches LSTM bidirectionnelles (BiLSTM) ou en créant un réseau plus profond. Pour plus d’informations, veuillez consulter Long Short-Term Memory Neural Networks.

Vous trouverez un exemple illustrant comment utiliser des réseaux à convolution pour classer des données séquentielles dans Train Speech Command Recognition Model Using Deep Learning.

Références

[1] Kudo, Mineichi, Jun Toyama et Masaru Shimbo. « Multidimensional Curve Classification Using Passing-through Regions. » Pattern Recognition Letters 20, no. 11–13 (novembre 1999) : 1103–11. https://doi.org/10.1016/S0167-8655(99)00077-X.

[2] Kudo, Mineichi, Jun Toyama et Masaru Shimbo. Japanese Vowels Data Set. Distribué par UCI Machine Learning Repository. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels

Voir aussi

Sujets associés