Contenu principal

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

DAGNetwork

(Déconseillé) Réseau DAG (Directed Acyclic Graph) pour le Deep Learning

L’utilisation d’objets DAGNetwork est déconseillée. Utilisez des objets dlnetwork à la place. Pour plus d’informations, veuillez consulter Historique des versions.

Description

Un réseau DAG est un réseau de neurones pour le Deep Learning dont les couches sont disposées sous la forme d’un graphe acyclique orienté. Un réseau DAG peut présenter une architecture plus complexe dans laquelle les couches ont des entrées provenant de plusieurs couches et des sorties vers plusieurs couches.

Création

Il existe plusieurs façons de créer un objet DAGNetwork :

Remarque

Pour découvrir d’autres réseaux préentraînés, voir Pretrained Deep Neural Networks.

Propriétés

développer tout

Ce propriété est en lecture seule.

Couches du réseau, définies par un tableau de Layer.

Ce propriété est en lecture seule.

Connexions des couches définies sous la forme d'une table à deux colonnes.

Dans la table, chaque ligne représente une connexion dans le graphe des couches. La première colonne, intitulée Source, indique la source de chaque connexion. La deuxième colonne, intitulée Destination, indique la destination de chaque connexion. Les sources et destinations des connexions sont des noms de couches ou prennent la forme "layerName/IOName", où "IOName" correspond au nom de la couche en entrée ou en sortie.

Types de données : table

Ce propriété est en lecture seule.

Noms des couches en entrée, définis par un cell array de vecteurs de caractères.

Types de données : cell

Ce propriété est en lecture seule.

Noms des couches en sortie, définis par un cell array de vecteurs de caractères.

Types de données : cell

Fonctions d'objet

activations(Not recommended) Compute deep learning network layer activations
classify(Not recommended) Classify data using trained deep learning neural network
predict(Not recommended) Predict responses using trained deep learning neural network
plotTracer l’architecture du réseau de neurones
predictAndUpdateState(Not recommended) Predict responses using a trained recurrent neural network and update the network state
classifyAndUpdateState(Not recommended) Classify data using a trained recurrent neural network and update the network state
resetStateReset state parameters of neural network

Exemples

réduire tout

Créez un réseau DAG (Directed Acyclic Graph - graphe acyclique orienté) pour le Deep Learning.

Entraînez le réseau pour classer les images de chiffres. Le réseau simple de cet exemple se compose des éléments suivants :

  • Une branche principale comportant des couches connectées de manière séquentielle.

  • Une connexion de type raccourci contenant une couche unique de convolution 1 x 1. Les connexions de type raccourci permettent aux gradients des paramètres de passer plus facilement de la couche de sortie vers les couches précédentes du réseau.

Créez la branche principale du réseau sous la forme d’un layer array (layer array). La couche d'addition additionne les entrées multiples élément par élément. Spécifiez le nombre d’entrées que la couche d’addition doit additionner. Pour faciliter l'ajout de connexions par la suite, spécifiez les noms pour la première couche ReLU et la couche d'addition.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(5,16,'Padding','same')
    batchNormalizationLayer
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,32,'Padding','same','Stride',2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer
    
    additionLayer(2,'Name','add')
    
    averagePooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Créez un graphe de couches à partir du tableau de couches (layer array). layerGraph connecte toutes les couches de layers de manière séquentielle. Tracez le graphe des couches.

lgraph = layerGraph(layers);
figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

Créez la couche de convolution 1 x 1 et ajoutez-la au graphe des couches. Spécifiez le nombre de filtres par convolution et le pas de sorte que la taille d'activation corresponde à celle de la troisième couche ReLU. Cette disposition permet à la couche d'addition d'ajouter les sorties de la troisième couche ReLU et de la couche de convolution 1 x 1. Pour vérifier la présence de la couche dans le graphe, tracez le graphe des couches.

skipConv = convolution2dLayer(1,32,'Stride',2,'Name','skipConv');
lgraph = addLayers(lgraph,skipConv);
figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

Créez la connexion de type raccourci entre la couche 'relu_1' et la couche 'add'. Étant donné que vous avez spécifié un nombre d'entrées de 2 pour la couche d'addition à sa création, la couche contient deux entrées nommées 'in1' et 'in2'. La troisième couche ReLU est déjà connectée à l’entrée 'in1'. Connectez la couche 'relu_1' à la couche 'skipConv', et la couche 'skipConv' à l’entrée 'in2' de la couche 'add'. La couche d'addition additionne à présent les sorties de la troisième couche ReLU et la couche 'skipConv'. Pour vérifier que les couches sont correctement connectées, tracez le graphe des couches.

lgraph = connectLayers(lgraph,'relu_1','skipConv');
lgraph = connectLayers(lgraph,'skipConv','add/in2');
figure
plot(lgraph);

Figure contains an axes object. The axes object contains an object of type graphplot.

Chargez les données d’apprentissage et de validation qui se composent d’images en 28 x 28 de chiffres en niveaux de gris.

[XTrain,YTrain] = digitTrain4DArrayData;
[XValidation,YValidation] = digitTest4DArrayData;

Spécifiez les options d’apprentissage et entraînez le réseau. trainNetwork valide le réseau avec les données de validation à chaque itération ValidationFrequency.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'Shuffle','every-epoch', ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');
net = trainNetwork(XTrain,YTrain,lgraph,options);

Figure Training Progress (28-Oct-2023 04:07:53) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 15 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 15 objects of type patch, text, line.

Afficher les propriétés du réseau entraîné. Le réseau est un objet DAGNetwork.

net
net = 
  DAGNetwork with properties:

         Layers: [16x1 nnet.cnn.layer.Layer]
    Connections: [16x2 table]
     InputNames: {'imageinput'}
    OutputNames: {'classoutput'}

Classez les images de validation et calculez la précision. Le réseau est très précis.

YPredicted = classify(net,XValidation);
accuracy = mean(YPredicted == YValidation)
accuracy = 0.9932

Capacités étendues

développer tout

Historique des versions

Introduit dans R2017b

réduire tout