additionLayer
Capa de suma
Descripción
Una capa de suma añade entradas de múltiples capas de redes neuronales elemento por elemento.
Especifique el número de entradas a la capa cuando la cree. Las entradas de la capa tienen los nombres 'in1','in2',...,'inN'
, donde N
es el número de entradas. Use los nombres de entradas cuando conecte o desconecte la capa usando connectLayers
o disconnectLayers
. Todas las entradas de una capa de suma deben tener la misma dimensión.
Creación
Propiedades
NumInputs
— Número de entradas
entero positivo
Número de entradas a la capa, especificado como un entero positivo mayor que o igual a 2.
Las entradas tienen los nombres 'in1','in2',...,'inN'
, donde N
es NumInputs
. Por ejemplo, si NumInputs
es 3, las entradas tienen los nombres 'in1','in2'
y 'in3'
. Use los nombres de entradas cuando conecte o desconecte la capa usando las funciones connectLayers
o disconnectLayers
.
Name
— Nombre de la capa
''
(predeterminado) | vector de caracteres | escalar de cadena
Nombre de la capa, especificado como un vector de caracteres o un escalar de cadena. Para entradas en forma de arreglo Layer
, las funciones trainNetwork
, assembleNetwork
, layerGraph
y dlnetwork
asignan automáticamente nombres a las capas con el nombre ''
.
Tipos de datos: char
| string
InputNames
— Nombres de las entradas
{'in1','in2',…,'inN'}
(predeterminado)
Los nombres de las entradas, especificados como {'in1','in2',...,'inN'}
, donde N
es el número de entradas de la capa.
Tipos de datos: cell
NumOutputs
— Número de salidas
1
(predeterminado)
Esta propiedad o parámetro es de solo lectura.
Número de salidas de la capa. Esta capa solo tiene una salida.
Tipos de datos: double
OutputNames
— Nombres de salida
{'out'}
(predeterminado)
Esta propiedad o parámetro es de solo lectura.
Nombres de las salidas de la capa. Esta capa solo tiene una salida.
Tipos de datos: cell
Ejemplos
Crear y conectar una capa de suma
Cree una capa de suma con dos entradas y el nombre 'add_1'
.
add = additionLayer(2,'Name','add_1')
add = AdditionLayer with properties: Name: 'add_1' NumInputs: 2 InputNames: {'in1' 'in2'}
Cree dos capas ReLU y conéctelas con la capa de suma. La capa de suma añade las salidas de las capas ReLU.
relu_1 = reluLayer('Name','relu_1'); relu_2 = reluLayer('Name','relu_2'); lgraph = layerGraph; lgraph = addLayers(lgraph,relu_1); lgraph = addLayers(lgraph,relu_2); lgraph = addLayers(lgraph,add); lgraph = connectLayers(lgraph,'relu_1','add_1/in1'); lgraph = connectLayers(lgraph,'relu_2','add_1/in2'); plot(lgraph)
Crear una red DAG simple
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)
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)
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);
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);
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.9934
Algoritmos
Formatos de entrada y salida de capa
Las capas en un arreglo de capas o en una gráfica de capas pasan datos a las capas posteriores como objetos dlarray
con formato. El formato de un objeto dlarray
es una cadena de caracteres, en la que cada carácter describe la dimensión correspondiente de los datos. Los formatos constan de uno o más de estos caracteres:
"S"
: espacial"C"
: canal"B"
: lote"T"
: tiempo"U"
: sin especificar
Por ejemplo, los datos de imagen 2D representados como arreglo 4D, donde las dos primeras dimensiones corresponden a las dimensiones espaciales de las imágenes, la tercera dimensión corresponde a los canales de las imágenes y la cuarta dimensión corresponde a la dimensión de lote, pueden describirse como datos con formato "SSCB"
(espacial, espacial, canal, lote).
Puede interactuar con estos objetos dlarray
en flujos de trabajo de diferenciación automática, como desarrollar una capa personalizada, usar un objeto functionLayer
o usar las funciones forward
y predict
con objetos dlnetwork
.
En esta tabla se muestran los formatos de entrada admitidos de objetos AdditionLayer
y el formato de salida correspondiente. Si la salida de la capa se pasa a una capa personalizada que no hereda de la clase nnet.layer.Formattable
o un objeto FunctionLayer
con la propiedad Formattable
establecida en 0
(falso), entonces la capa recibe un objeto dlarray
sin formato con dimensiones ordenadas correspondientes a los formatos de esta tabla.
Cada entrada debe tener datos con el mismo formato.
Formato de entrada | Formato de salida |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
En objetos dlnetwork
, los objetos AdditionLayer
también admiten estas combinaciones de formato de entrada y salida.
Formato de entrada | Formato de salida |
---|---|
|
|
|
|
|
|
|
|
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Historial de versiones
Introducido en R2017b
Consulte también
trainNetwork
| layerGraph
| depthConcatenationLayer
Temas
- Crear una red neuronal de deep learning sencilla para clasificación
- Deep learning en MATLAB
- Redes neuronales profundas preentrenadas
- Set Up Parameters and Train Convolutional Neural Network
- Specify Layers of Convolutional Neural Network
- Train Residual Network for Image Classification
- Lista de capas de deep learning
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)