Main Content

Démarrer avec Deep Network Designer

Cet exemple montre comment utiliser Deep Network Designer pour créer et entraîner un réseau de neurones récurrent simple pour la classification Deep Learning de séquences.

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 vous permet d’entrer des données séquentielles dans un réseau et de réaliser des prédictions en fonction des pas de temps individuels des données séquentielles.

Charger les données séquentielles

Chargez les données d'exemple depuis WaveformData. Pour accéder à ces données, ouvrez l’exemple en tant que live script. Ces données contiennent des formes d’onde appartenant à quatre classes : sinusoïdales, carrées, triangulaires et en dents de scie. Cet exemple entraîne un réseau de neurones LSTM à reconnaître le type de forme d’onde à partir de données de séries temporelles. Les séquences possèdent chacune trois canaux et sont de longueur variable.

load WaveformData 

Visualisez certaines des séquences dans un tracé.

numChannels = size(data{1},2);
classNames = categories(labels);

figure
tiledlayout(2,2)
for i = 1:4
    nexttile
    stackedplot(data{i},DisplayLabels="Channel "+string(1:numChannels))
    
    xlabel("Time Step")
    title("Class: " + string(labels(i)))
end

Partitionnez les données entre un jeu d’apprentissage contenant 80 % des données et des jeux de validation et de test en contenant chacun 10 %. Pour partitionner les données, utilisez la fonction trainingPartitions. Pour accéder à cette fonction, ouvrez l’exemple en tant que live script.

numObservations = numel(data);
[idxTrain,idxValidation,idxTest] = trainingPartitions(numObservations,[0.8 0.1 0.1]);

XTrain = data(idxTrain);
TTrain = labels(idxTrain);

XValidation = data(idxValidation);
TValidation = labels(idxValidation);

XTest = data(idxTest);
TTest = labels(idxTest);

Définir l’architecture du réseau

Pour créer le réseau, utilisez l’application Deep Network Designer.

deepNetworkDesigner

Pour créer un réseau de séquences, dans la section Sequence Networks, 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 sequence-to-label.

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 Waveform.

Sélectionnez la couche d’entrée des séquences input et définissez InputSize à 3, ce qui correspond au nombre de canaux.

Sélectionnez la couche entièrement connectée fc et définissez OutputSize à 4, ce qui correspond au nombre de classes.

Pour vérifier que le réseau est prêt pour l’apprentissage, cliquez sur Analyze. Deep Learning Network Analyzer n’indique aucune erreur ni aucun avertissement. Le réseau est donc prêt pour l’apprentissage. Pour exporter le réseau, cliquez sur Export. L’application enregistre le réseau dans la variable net_1.

Spécifier les options d’apprentissage

Spécifiez les options d’apprentissage. Le choix des options nécessite une analyse empirique.

options = trainingOptions("adam", ...
    MaxEpochs=500, ...
    InitialLearnRate=0.0005, ...
    GradientThreshold=1, ...
    ValidationData={XValidation,TValidation}, ...
    Shuffle = "every-epoch", ...
    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. Comme l’objectif est la classification, spécifiez la perte d’entropie croisée.

net = trainnet(XTrain,TTrain,net_1,"crossentropy",options);

Tester le réseau de neurones

Pour tester le réseau de neurones, classez les données de test 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.

scores = minibatchpredict(net,XTest);
YTest = scores2label(scores,classNames);

Calculez la précision de la classification. La précision est le pourcentage d’étiquettes correctement prédites.

acc = mean(YTest == TTest)
acc = 0.8300

Visualisez les prédictions dans une matrice ou diagramme de confusion.

figure
confusionchart(TTest,YTest)

Voir aussi

Sujets associés