Main Content

dlnetwork

Redes neuronales de deep learning

Desde R2019b

Descripción

Un objeto dlnetwork especifica una arquitectura de red neuronal de deep learning

Sugerencia

Para la mayor parte de las tareas de deep learning, puede utilizar una red neuronal preentrenada y adaptarla a sus propios datos. Para ver un ejemplo de cómo usar la transferencia del aprendizaje para volver a entrenar una red neuronal convolucional para clasificar un nuevo conjunto de imágenes, consulte Retrain Neural Network to Classify New Images. Como alternativa, puede crear y entrenar redes neuronales desde cero usando las funciones trainnet y trainingOptions.

Si la función trainingOptions no proporciona las opciones de entrenamiento que necesita para la tarea, puede crear un bucle de entrenamiento personalizado mediante diferenciación automática. Para obtener más información, consulte Entrenar una red con un bucle de entrenamiento personalizado.

Si la función trainnet no proporciona la función de pérdida que necesita para la tarea, puede especificar una función de pérdida personalizada para trainnet como identificador de función. En el caso de las funciones de pérdida que requieren más entradas que las predicciones y los objetivos (por ejemplo, funciones de pérdida que requieren acceso a la red neuronal o entradas adicionales), entrene el modelo mediante un bucle de entrenamiento personalizado. Para obtener más información, consulte Entrenar una red con un bucle de entrenamiento personalizado.

Si Deep Learning Toolbox™ no proporciona las capas que necesita para la tarea, puede crear una capa personalizada. Para obtener más información, consulte Definir capas de deep learning personalizadas. Para los modelos que no se pueden especificar como redes de capas, puede definir el modelo como una función. Para obtener más información, consulte Train Network Using Model Function.

Para obtener más información sobre qué método de entrenamiento usar para cada tarea, consulte Train Deep Learning Model in MATLAB.

Creación

Descripción

Red vacía

ejemplo

net = dlnetwork crea un objeto dlnetwork sin capas. Use esta sintaxis para crear una red neuronal desde cero. (desde R2024a)

Red con capas de entrada

ejemplo

net = dlnetwork(layers) crea una red neuronal usando las capas especificadas e inicializa cualquier parámetro que se pueda aprender y cualquier parámetro de estado que no se haya configurado. Esta sintaxis usa la capa de entrada de layers para determinar el tamaño y el formato de los parámetros que se pueden aprender y los parámetros de estado de la red neuronal.

Use esta sintaxis cuando layers defina una red neuronal completa de una sola entrada y tenga capas dispuestas en serie y una capa de entrada.

net = dlnetwork(layers,OutputNames=names) también establece la propiedad OutputNames. La propiedad OutputNames especifica las capas o salidas de capa que corresponden a salidas de red.

Use esta sintaxis cuando layers defina una red neuronal completa de una sola entrada y de varias salidas, tenga capas dispuestas en serie y tenga una capa de entrada.

net = dlnetwork(layers,Initialize=tf) especifica si se inicializan los parámetros que se pueden aprender y los parámetros de estado de la red neuronal. Cuando tf es 1, (true), esta sintaxis es equivalente a net = dlnetwork(layers). Cuando tf es 0, (false), esta sintaxis es equivalente a crear una red vacía y después añadir layers usando la función addLayers.

Red con entradas no conectadas

net = dlnetwork(layers,X1,...,XN) crea una red neuronal usando las capas especificadas e inicializa cualquier parámetro que se pueda aprender y cualquier parámetro de estado que no se haya configurado. Esta sintaxis usa los objetos de disposición de datos de red o entradas de ejemplo X1,...,XN para determinar el tamaño y el formato de los parámetros que se pueden aprender y los valores de estado de la red neuronal, donde N es el número de entradas de red.

Use esta sintaxis cuando layers defina una red neuronal completa y tenga capas dispuestas en serie y entradas que no estén conectadas a capas de entrada.

net = dlnetwork(layers,X1,...,XN,OutputNames=names) también establece la propiedad OutputNames.

Use esta sintaxis cuando layers defina una red neuronal completa y tenga varias salidas, capas dispuestas en serie y entradas que no estén conectadas a capas de entrada.

Red podable

net = dlnetwork(prunableNet) convierte TaylorPrunableNetwork en un objeto dlnetwork eliminando los filtros seleccionados para la poda de las capas de convolución de prunableNet y devuelve un objeto dlnetwork comprimido que tiene menos parámetros que se pueden aprender y es más pequeño.

Argumentos de entrada

expandir todo

Capas de la red, especificadas como un arreglo Layer.

El software conecta las capas en series.

Para obtener una lista de capas compatibles, consulte Lista de capas de deep learning.

Ejemplo de datos o disposiciones de datos que deben usarse para determinar el tamaño y los formatos de los parámetros que se pueden aprender y de los parámetros de estado, especificados como objetos dlarray con formato u objetos networkDataLayout con formato. El software propaga X1,...XN a través de la red para determinar los tamaños y formatos apropiados de los parámetros que se pueden aprender y de los parámetros de estado del objeto dlnetwork e inicializa cualquier parámetro que se pueda aprender o de estado que no esté configurado.

El orden de X1,...,XN debe coincidir con el de las capas que requieren entradas en layers.

Nota

La inicialización automática solo usa la información sobre el tamaño y el formato de los datos de entrada. Para la inicialización que depende de los valores de los datos de entrada, debe inicializar de forma manual los parámetros que se pueden aprender.

Indicador para inicializar los parámetros que se pueden aprender y los parámetros de estado, especificado como uno de estos valores:

  • 1 (true): inicializa los parámetros que se pueden aprender y los parámetros de estado. El software usa la capa de entrada en layers para determinar los tamaños de los parámetros que se pueden aprender y de los parámetros de estado.

  • 0 (false): no inicializa los parámetros que se pueden aprender ni los parámetros de estado. Use esta opción en los siguientes casos:

    • Cuando quiera realizar más modificaciones en la red neuronal. Por ejemplo, cuando prevea añadir o eliminar capas y conexiones.

    • Cuando use la red en una capa personalizada y quiera usar una función de inicialización personalizada.

La predicción de redes neuronales y los bucles de entrenamiento personalizados requieren una red inicializada. Para inicializar una red no inicializada, utilice la función initialize.

Red para la poda mediante una aproximación de Taylor de primer orden, especificada como un objeto TaylorPrunableNetwork.

Podar una red neuronal profunda requiere el paquete de soporte Deep Learning Toolbox Model Quantization Library. Este paquete es un complemento gratuito que puede descargarse a través de Add-On Explorer. Como alternativa, consulte Deep Learning Toolbox Model Quantization Library.

Propiedades

expandir todo

Capas de la red, especificadas como un arreglo Layer.

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

Cada fila de la tabla representa una conexión en la red neuronal. 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

Parámetros de la red que se pueden aprender, especificados como una tabla con tres columnas:

  • Layer: nombre de la capa, especificado como un escalar de cadena.

  • Parameter: nombre del parámetro, especificado como un escalar de cadena.

  • Value: valor del parámetro, especificado como un objeto dlarray.

Los parámetros de la red que se pueden aprender contienen las características que aprende la red. Por ejemplo, los pesos de las capas totalmente conectadas y de convolución.

Tipos de datos: table

Estado de la red, especificado como una tabla.

El estado de la red es una tabla con tres columnas:

  • Layer: nombre de la capa, especificado como un escalar de cadena.

  • Parameter: nombre del parámetro de estado, especificado como un escalar de cadena.

  • Value: valor del parámetro de estado, especificado como un objeto dlarray.

Los estados de capa contienen información calculada durante la operación de capa que se conservará para su uso en posteriores pases hacia delante de la capa. Un ejemplo sería el estado de las celdas y el estado oculto de las capas LSTM, o las estadísticas de ejecución en las capas de normalización de lotes.

Para capas recurrentes, como las capas LSTM, con la propiedad HasStateInputs establecida en 1 (true), la tabla de estados no contiene entradas para los estados de esa capa.

Durante el entrenamiento o la inferencia, puede actualizar el estado de la red usando la salida de las funciones forward y predict.

Tipos de datos: table

Esta propiedad o parámetro es de solo lectura.

Nombres de las entradas de la red, especificados como un arreglo de celdas de vectores de caracteres.

Las entradas de la red son las capas de entrada y las entradas no conectadas de las capas.

Para las capas de entrada y las capas con una sola entrada, el nombre de la entrada es el nombre de la capa. Para las capas con varias entradas, el nombre de la entrada es "layerName/inputName", donde layerName es el nombre de la capa y inputName es el nombre de la entrada de la capa.

Tipos de datos: cell

Nombres de las salidas de la red, especificados como un arreglo de celdas de vectores de caracteres.

Para las capas con una única salida, el nombre de la salida es el nombre de la capa. Para las capas con varias salidas, el nombre de la salida es "layerName/outputName", donde layerName es el nombre de la capa y outputName es el nombre de la salida de la capa.

Si no especifica los nombres de salida, el software establece la propiedad OutputNames en las capas con salidas no conectadas.

De forma predeterminada, las funciones predict y forward devuelven los datos de salida de las capas dados por la propiedad OutputNames.

Tipos de datos: cell

Esta propiedad o parámetro es de solo lectura.

Indicador de red inicializada, especificado como uno de estos valores:

  • 1 (true): la red se ha inicializado y está lista para la predicción y los bucles de entrenamiento personalizados. Si cambia los valores de los parámetros que se pueden aprender o de los parámetros de estado, la red permanece inicializada.

  • 0 (false): la red no se ha inicializado y no está lista para la predicción ni para los bucles de entrenamiento personalizados. Para inicializar una red no inicializada, utilice la función initialize.

Tipos de datos: logical

Funciones del objeto

addInputLayerAdd input layer to network
addLayersAñadir capas a una red neuronal
removeLayersRemove layers from neural network
connectLayersConectar capas en una red neuronal
disconnectLayersDisconnect layers in neural network
replaceLayerReplace layer in neural network
getLayerLook up a layer by name or path
expandLayersExpand network layers
groupLayersGroup layers into network layers
summaryImprimir un resumen de la red
plotRepresentar una arquitectura de red neuronal
initializeInitialize learnable and state parameters of a dlnetwork
predictCompute deep learning network output for inference
forwardCompute deep learning network output for training
resetStateReset state parameters of neural network
setL2FactorSet L2 regularization factor of layer learnable parameter
setLearnRateFactorSet learn rate factor of layer learnable parameter
getLearnRateFactorGet learn rate factor of layer learnable parameter
getL2FactorGet L2 regularization factor of layer learnable parameter

Ejemplos

contraer todo

Defina una red neuronal de dos salidas que prediga tanto etiquetas categóricas como valores numéricos a partir de imágenes 2D.

Especifique el número de clases y respuestas.

numClasses = 10;
numResponses = 1;

Cree una red neuronal vacía.

net = dlnetwork;

Defina las capas de la rama principal de la red y la salida softmax.

layers = [
    imageInputLayer([28 28 1],Normalization="none")

    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")

    fullyConnectedLayer(numClasses)
    softmaxLayer(Name="softmax")];

net = addLayers(net,layers);

Añada la conexión de omisión.

layers = [
    convolution2dLayer(1,32,Stride=2,Name="conv_skip")
    batchNormalizationLayer
    reluLayer(Name="relu_skip")];

net = addLayers(net,layers);
net = connectLayers(net,"relu_1","conv_skip");
net = connectLayers(net,"relu_skip","add/in2");

Añada la capa totalmente conectada para la salida de regresión.

layers = fullyConnectedLayer(numResponses,Name="fc_2");
net = addLayers(net,layers);
net = connectLayers(net,"add","fc_2");

Visualice la red neuronal en una gráfica.

figure
plot(net)

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

Si tiene una capa que define una red neuronal completa de una sola entrada, tiene capas dispuestas en serie y tiene una capa de entrada, puede convertir el arreglo de capas en un objeto dlnetwork directamente.

Especifique una red LSTM como un arreglo de capas.

layers = [
    sequenceInputLayer(12)
    lstmLayer(100)
    fullyConnectedLayer(9)
    softmaxLayer];

Convierta el arreglo de capas en un objeto dlnetwork. Como el arreglo de capas tiene una capa de entrada y ninguna otra entrada, el software inicializa la red neuronal.

net = dlnetwork(layers)
net = 
  dlnetwork with properties:

         Layers: [4x1 nnet.cnn.layer.Layer]
    Connections: [3x2 table]
     Learnables: [5x3 table]
          State: [2x3 table]
     InputNames: {'sequenceinput'}
    OutputNames: {'softmax'}
    Initialized: 1

  View summary with summary.

Cargue una red preentrenada.

net = imagePretrainedNetwork;

La propiedad Learnables del objeto dlnetwork es una tabla que contiene los parámetros de la red que se pueden aprender. La tabla incluye parámetros de capas anidadas en filas separadas. Visualice las primeras filas de la tabla de parámetros.

learnables = net.Learnables;
head(learnables)
          Layer           Parameter           Value       
    __________________    _________    ___________________

    "conv1"               "Weights"    {3x3x3x64  dlarray}
    "conv1"               "Bias"       {1x1x64    dlarray}
    "fire2-squeeze1x1"    "Weights"    {1x1x64x16 dlarray}
    "fire2-squeeze1x1"    "Bias"       {1x1x16    dlarray}
    "fire2-expand1x1"     "Weights"    {1x1x16x64 dlarray}
    "fire2-expand1x1"     "Bias"       {1x1x64    dlarray}
    "fire2-expand3x3"     "Weights"    {3x3x16x64 dlarray}
    "fire2-expand3x3"     "Bias"       {1x1x64    dlarray}

Para congelar los parámetros de la red que se pueden aprender, realice un bucle sobre ellos y establezca la tasa de aprendizaje en 0 mediante la función setLearnRateFactor.

factor = 0;

numLearnables = size(learnables,1);
for i = 1:numLearnables
    layerName = learnables.Layer(i);
    parameterName = learnables.Parameter(i);
    
    net = setLearnRateFactor(net,layerName,parameterName,factor);
end

Para usar los factores de tasa de aprendizaje actualizados durante el entrenamiento, debe pasar el objeto dlnetwork a la función de actualización en el bucle de entrenamiento personalizado. Por ejemplo, use el comando

[net,velocity] = sgdmupdate(net,gradients,velocity);

Capacidades ampliadas

Historial de versiones

Introducido en R2019b

expandir todo