Main Content

DAGNetwork

(No recomendado) Red gráfica acíclica dirigida (DAG) para deep learning

Los objetos DAGNetwork no están recomendados. En su lugar, use los objetos dlnetwork. Para obtener más información, consulte Historial de versiones.

Descripción

Una red gráfica acíclica dirigida (DAG) es una red neuronal para deep learning con capas dispuestas en forma de gráfica acíclica dirigida. Una red DAG puede tener una arquitectura más compleja en la que las capas tienen entradas de varias capas y salidas a varias capas.

Creación

Hay varias formas de crear un objeto DAGNetwork:

Nota

Para obtener información sobre otras redes preentrenadas, consulte Redes neuronales profundas preentrenadas.

Propiedades

expandir todo

Esta propiedad o parámetro es de solo lectura.

Capas de la red, especificadas como un arreglo Layer.

Esta propiedad o parámetro es de solo lectura.

Conexiones de la capa, especificadas como una tabla con dos columnas.

Cada fila de la tabla representa una conexión en la gráfica de capas. La primera columna, Source, especifica el origen de cada conexión. La segunda columna, Destination, especifica el destino de cada conexión. Las fuentes y los destinos de la conexión pueden ser nombres de capa o tener la forma "layerName/IOName", donde "IOName" es el nombre de la entrada o la salida de la capa.

Tipos de datos: table

Esta propiedad o parámetro es de solo lectura.

Nombres de las capas de entrada, especificados como un arreglo de celdas de vectores de caracteres.

Tipos de datos: cell

Esta propiedad o parámetro es de solo lectura.

Nombres de las capas de salida, especificados como un arreglo de celdas de vectores de caracteres.

Tipos de datos: cell

Funciones del objeto

activations(No recomendado) Calcular las activaciones de las capas de una red de deep learning
classify(No recomendado) Clasificar datos con una red neuronal de deep learning entrenada
predict(No recomendado) Predecir respuestas usando una red neuronal de deep learning entrenada
plotRepresentar una arquitectura de red neuronal
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

Ejemplos

contraer todo

Cree una red gráfica acíclica dirigida (DAG) simple de deep learning.

Entrene a la red para clasificar imágenes de dígitos. La red simple de este ejemplo está compuesta por lo siguiente:

  • Una rama principal con capas conectadas de forma secuencial.

  • Una conexión de atajo que contiene una sola capa convolucional de 1 por 1. Las conexiones de atajo permiten que los gradientes de parámetros fluyan con mayor facilidad desde la capa de salida a las primeras capas de la red.

Cree la rama principal de la red como un arreglo de capas. La capa de suma añade varias entradas elemento por elemento. Especifique el número de entradas que debe sumar la capa de suma. Para añadir conexiones con facilidad más tarde, especifique los nombres de la primera capa ReLU y de la capa de suma.

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];

Cree una gráfica de capas a partir del arreglo de capas. layerGraph conecta todas las capas de layers secuencialmente. Represente la gráfica de capas.

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

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

Cree la capa convolucional de 1 por 1 y añádala a la gráfica de capas. Especifique el número de filtros convolucionales y el tramo, para que el tamaño de activación coincida con el tamaño de activación de la tercera capa ReLU. Este ajuste permite que la capa de suma añada las salidas de la tercera capa ReLU y de la capa convolucional de 1 por 1. Para comprobar que la capa se encuentra en la gráfica, represente la gráfica de capas.

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.

Cree la conexión de atajo desde la capa 'relu_1' a la capa 'add'. Dado que especificó 2 como el número de entradas de la capa de suma durante su creación, la capa tiene dos entradas llamadas 'in1' y 'in2'. La tercera capa ReLU ya está conectada a la entrada 'in1'. Conecte la capa 'relu_1' a la capa 'skipConv', y la capa 'skipConv' a la entrada 'in2' de la capa 'add'. Ahora, la capa de suma sumará las salidas de la tercera capa ReLU y de la capa 'skipConv'. Para comprobar que las capas se han conectado correctamente, represente la gráfica de capas.

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.

Cargue los datos de entrenamiento y validación, que están formados por imágenes de dígitos de escala de grises de 28 por 28.

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

Especifique las opciones de entrenamiento y entrene la red. trainNetwork valida la red usando los datos de validación cada ValidationFrequency iteraciones.

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.

Muestre las propiedades de la red entrenada. La red es un objeto DAGNetwork.

net
net = 
  DAGNetwork with properties:

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

Clasifique las imágenes de validación y calcule la precisión. La red es muy precisa.

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

Capacidades ampliadas

Historial de versiones

Introducido en R2017b

contraer todo

R2024a: No recomendado

A partir de la versión R2024a, no se recomienda usar objetos DAGNetwork; en su lugar, use objetos dlnetwork.

No está previsto eliminar el soporte para los objetos DAGNetwork. Sin embargo, en su lugar se recomiendan los objetos dlnetwork, que tienen estas ventajas:

  • Los objetos dlnetwork son un tipo de datos unificado que admite la creación de redes, la predicción, el entrenamiento integrado, la visualización, la compresión, la verificación y los bucles de entrenamiento personalizados.

  • Los objetos dlnetwork admiten una gama más amplia de arquitecturas de red que puede crear o importar desde plataformas externas.

  • La función trainnet admite objetos dlnetwork, lo que le permite especificar fácilmente funciones de pérdida. Puede seleccionar entre funciones de pérdida integradas o especificar una función de pérdida personalizada.

  • Entrenar y predecir con los objetos dlnetwork suele ser más rápido que los flujos de trabajo LayerGraph y trainNetwork.

Para convertir un objeto DAGNetwork entrenado en un objeto dlnetwork, utilice la función dag2dlnetwork.

Esta tabla muestra algunos usos habituales de los objetos DAGNetwork y cómo actualizar el código para usar funciones de objeto dlnetwork en su lugar.

No recomendadoRecomendado
Y = predict(net,X);
Y = minibatchpredict(net,X);
Y = classify(net,X);
scores = minibatchpredict(net,X);
Y = scores2label(scores,classNames);
plot(net);
plot(net);
Y = activations(net,X,layerName);
Y = predict(net,X,Outputs=layerName);
[net,Y] = predictAndUpdateState(net,X);
[Y,state] = predict(net,X);
net.State = state;
[net,Y] = classifyAndUpdateState(net,X);
[scores,state] = predict(net,X);
Y = scores2label(scores,classNames);
net.State = state;