Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

SeriesNetwork

Red en serie de deep learning

Descripción

Una red en serie es una red neuronal de deep learning con capas dispuestas una detrás de otra. Tiene una única capa de entrada y una sola capa de salida.

Creación

Hay varias formas de crear un objeto SeriesNetwork:

Nota

Para obtener información sobre otras redes preentrenadas, como googlenet y resnet50, 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.

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

Tipos de datos: cell

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

Tipos de datos: cell

Funciones del objeto

activationsCalcular las activaciones de las capas de una red de deep learning
classifyClassify data using trained deep learning neural network
predictPredict responses using trained deep learning neural network
predictAndUpdateStatePredict responses using a trained recurrent neural network and update the network state
classifyAndUpdateStateClassify data using a trained recurrent neural network and update the network state
resetStateReset state parameters of neural network
plotRepresentar una arquitectura de red neuronal

Ejemplos

contraer todo

Cargue una red neuronal convolucional AlexNet preentrenada y examine las capas y clases.

Cargue la red AlexNet preentrenada mediante alexnet. La salida net es un objeto SeriesNetwork.

net = alexnet
net = 
  SeriesNetwork with properties:

    Layers: [25×1 nnet.cnn.layer.Layer]

Con la propiedad Layers, visualice la arquitectura de red. La red consta de 25 capas. Hay ocho capas con pesos que pueden aprenderse: cinco capas convolucionales y tres capas totalmente conectadas.

net.Layers
ans = 
  25x1 Layer array with layers:

     1   'data'     Image Input                   227x227x3 images with 'zerocenter' normalization
     2   'conv1'    Convolution                   96 11x11x3 convolutions with stride [4  4] and padding [0  0  0  0]
     3   'relu1'    ReLU                          ReLU
     4   'norm1'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     5   'pool1'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv2'    Grouped Convolution           2 groups of 128 5x5x48 convolutions with stride [1  1] and padding [2  2  2  2]
     7   'relu2'    ReLU                          ReLU
     8   'norm2'    Cross Channel Normalization   cross channel normalization with 5 channels per element
     9   'pool2'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv3'    Convolution                   384 3x3x256 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'relu3'    ReLU                          ReLU
    12   'conv4'    Grouped Convolution           2 groups of 192 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    13   'relu4'    ReLU                          ReLU
    14   'conv5'    Grouped Convolution           2 groups of 128 3x3x192 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'relu5'    ReLU                          ReLU
    16   'pool5'    Max Pooling                   3x3 max pooling with stride [2  2] and padding [0  0  0  0]
    17   'fc6'      Fully Connected               4096 fully connected layer
    18   'relu6'    ReLU                          ReLU
    19   'drop6'    Dropout                       50% dropout
    20   'fc7'      Fully Connected               4096 fully connected layer
    21   'relu7'    ReLU                          ReLU
    22   'drop7'    Dropout                       50% dropout
    23   'fc8'      Fully Connected               1000 fully connected layer
    24   'prob'     Softmax                       softmax
    25   'output'   Classification Output         crossentropyex with 'tench' and 999 other classes

Puede ver los nombres de las clases que la red ha aprendido visualizando la propiedad Classes de la capa de clasificación de salida (la última capa). Para visualizar las 10 primeras clases, seleccione los primeros 10 elementos.

net.Layers(end).Classes(1:10)
ans = 10×1 categorical array
     tench 
     goldfish 
     great white shark 
     tiger shark 
     hammerhead 
     electric ray 
     stingray 
     cock 
     hen 
     ostrich 

Especifique el archivo de ejemplo 'digitsnet.prototxt' para empezar.

protofile = 'digitsnet.prototxt';

Importe las capas de la red.

layers = importCaffeLayers(protofile)
layers = 

  1x7 Layer array with layers:

     1   'testdata'   Image Input             28x28x1 images
     2   'conv1'      Convolution             20 5x5x1 convolutions with stride [1  1] and padding [0  0]
     3   'relu1'      ReLU                    ReLU
     4   'pool1'      Max Pooling             2x2 max pooling with stride [2  2] and padding [0  0]
     5   'ip1'        Fully Connected         10 fully connected layer
     6   'loss'       Softmax                 softmax
     7   'output'     Classification Output   crossentropyex with 'class1', 'class2', and 8 other classes

Cargue los datos como un objeto ImageDatastore.

digitDatasetPath = fullfile(matlabroot,'toolbox','nnet', ...
    'nndemos','nndatasets','DigitDataset');
imds = imageDatastore(digitDatasetPath, ...
    'IncludeSubfolders',true, ...
    'LabelSource','foldernames');

El almacén de datos contiene 10.000 imágenes sintéticas con dígitos del 0 al 9. Las imágenes se generan aplicando transformaciones al azar a imágenes de dígitos creadas con diferentes fuentes. Cada imagen de dígito tiene 28 por 28 píxeles. El almacén de datos contiene la misma cantidad de imágenes por categoría.

Muestre algunas de las imágenes del almacén de datos.

figure
numImages = 10000;
perm = randperm(numImages,20);
for i = 1:20
    subplot(4,5,i);
    imshow(imds.Files{perm(i)});
    drawnow;
end

Figure contains 20 axes objects. Axes object 1 contains an object of type image. Axes object 2 contains an object of type image. Axes object 3 contains an object of type image. Axes object 4 contains an object of type image. Axes object 5 contains an object of type image. Axes object 6 contains an object of type image. Axes object 7 contains an object of type image. Axes object 8 contains an object of type image. Axes object 9 contains an object of type image. Axes object 10 contains an object of type image. Axes object 11 contains an object of type image. Axes object 12 contains an object of type image. Axes object 13 contains an object of type image. Axes object 14 contains an object of type image. Axes object 15 contains an object of type image. Axes object 16 contains an object of type image. Axes object 17 contains an object of type image. Axes object 18 contains an object of type image. Axes object 19 contains an object of type image. Axes object 20 contains an object of type image.

Divida el almacén de datos de forma que cada categoría del conjunto de entrenamiento contenga 750 imágenes y el conjunto de prueba contenga el resto de las imágenes de cada etiqueta.

numTrainingFiles = 750;
[imdsTrain,imdsTest] = splitEachLabel(imds,numTrainingFiles,'randomize');

splitEachLabel divide los archivos de imagen de digitData en dos nuevos almacenes de datos, imdsTrain y imdsTest.

Defina la arquitectura de la red neuronal convolucional.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)
    reluLayer
    maxPooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Establezca la configuración predeterminada de las opciones del gradiente descendente estocástico con momento. Establezca el número máximo de épocas en 20 y comience el entrenamiento con una tasa de aprendizaje inicial de 0,0001.

options = trainingOptions('sgdm', ...
    'MaxEpochs',20,...
    'InitialLearnRate',1e-4, ...
    'Verbose',false, ...
    'Plots','training-progress');

Entrene la red.

net = trainNetwork(imdsTrain,layers,options);

Figure Training Progress (03-Apr-2023 08:01:26) contains 2 axes objects and another object of type uigridlayout. Axes object 1 with xlabel Iteration, ylabel Loss contains 6 objects of type patch, text, line. Axes object 2 with xlabel Iteration, ylabel Accuracy (%) contains 6 objects of type patch, text, line.

Ejecute la red entrenada en el conjunto de pruebas, que no se ha utilizado para entrenar la red, y prediga las etiquetas de imagen (dígitos).

YPred = classify(net,imdsTest);
YTest = imdsTest.Labels;

Calcule la precisión. La precisión es la relación entre el número de etiquetas verdaderas de los datos de prueba que coinciden con las clasificaciones de classify y el número de imágenes de los datos de prueba.

accuracy = sum(YPred == YTest)/numel(YTest)
accuracy = 0.9400

Capacidades ampliadas

Historial de versiones

Introducido en R2016a