fullyConnectedLayer
Capa totalmente conectada
Descripción
Una capa totalmente conectada multiplica la entrada por una matriz de pesos y luego añade un vector de sesgo.
Creación
Descripción
devuelve una capa totalmente conectada y especifica la propiedad layer
= fullyConnectedLayer(outputSize
)OutputSize
.
establece las propiedades opcionales Parámetros e inicialización, Tasa de aprendizaje y regularización y layer
= fullyConnectedLayer(outputSize
,Name,Value
)Name
usando pares nombre-valor. Por ejemplo, fullyConnectedLayer(10,'Name','fc1')
crea una capa totalmente conectada con un tamaño de salida de 10 y de nombre 'fc1'
. Puede especificar varios pares nombre-valor. Encierre el nombre de cada propiedad entre comillas simples.
Propiedades
Totalmente conectada
OutputSize
— Tamaño de salida
entero positivo
Tamaño de salida de la capa totalmente conectada, especificado como entero positivo.
Ejemplo: 10
InputSize
— Tamaño de entrada
'auto'
(predeterminado) | entero positivo
Tamaño de entrada de la capa totalmente conectada, especificada como entero positivo o 'auto'
. Si InputSize
es 'auto'
, el software determina automáticamente el tamaño de entrada durante el entrenamiento.
Parámetros e inicialización
WeightsInitializer
— Función para inicializar pesos
'glorot'
(predeterminado) | 'he'
| 'orthogonal'
| 'narrow-normal'
| 'zeros'
| 'ones'
| identificador de función
Función para inicializar los pesos, especificada como una de las siguientes opciones:
'glorot'
: inicializa los pesos con el inicializador Glorot [1] (también denominado inicializador Xavier). El inicializador Glorot muestrea de forma independiente a partir de una distribución uniforme con media cero y varianza2/(InputSize + OutputSize)
.'he'
: inicializa los pesos con el inicializador He [2]. El inicializador He muestrea a partir de una distribución normal con media cero y varianza2/InputSize
.'orthogonal'
: inicializa los pesos de entrada con Q, la matriz ortogonal resultado de la descomposición de QR de Z = QR de una matriz aleatoria Z muestreada a partir de una distribución normal unitaria. [3]'narrow-normal'
: inicializa los pesos muestreando de forma independiente a partir de una distribución normal con media cero y desviación estándar de 0.01.'zeros'
: inicializa los pesos con ceros.'ones'
: inicializa los pesos con unos.Identificador de función: inicializa los pesos con una función personalizada. Si especifica un identificador de función, la función debe tener la forma
weights = func(sz)
, dondesz
es el tamaño de los pesos. Para ver un ejemplo, consulte Specify Custom Weight Initialization Function.
La capa inicializa los pesos solo cuando la propiedad Weights
está vacía.
Tipos de datos: char
| string
| function_handle
BiasInitializer
— Función para inicializar sesgos
"zeros"
(predeterminado) | "narrow-normal"
| "ones"
| identificador de función
Función para inicializar sesgos, especificada como uno de estos valores:
"zeros"
: inicializa los sesgos con ceros."ones"
: inicializa los sesgos con unos."narrow-normal"
: inicializa los sesgos muestreando de forma independiente a partir de una distribución normal con media cero y desviación estándar de 0.01.Identificador de función: inicializa los sesgos con una función personalizada. Si especifica un identificador de función, la función debe tener la forma
bias = func(sz)
, dondesz
es el tamaño de los sesgos.
La capa inicializa los sesgos solo cuando la propiedad Bias
está vacía.
Tipos de datos: char
| string
| function_handle
Weights
— Pesos de capa
[]
(predeterminado) | matriz
Pesos de capa, especificados como una matriz.
Los pesos de capa son parámetros que se pueden aprender. Puede especificar el valor inicial de los pesos usando directamente la propiedad Weights
de la capa. Cuando entrena una red, si la propiedad Weights
de la capa no está vacía, las funciones trainnet
y trainNetwork
usan la propiedad Weights
como valor inicial. Si la propiedad Weights
está vacía, el software usa el inicializador especificado por la propiedad WeightsInitializer
de la capa.
Durante el entrenamiento, Weights
es una matriz de OutputSize
por InputSize
.
Tipos de datos: single
| double
Bias
— Sesgos de capa
[]
(predeterminado) | matriz
Sesgos de capa, especificados como una matriz.
Los sesgos de capa de capa son parámetros que se pueden aprender. Cuando entrena una red neuronal, si Bias
no está vacío, las funciones trainnet
y trainNetwork
usan la propiedad Bias
como valor inicial. Si Bias
está vacío, el software usa el inicializador especificado por BiasInitializer
.
Durante el entrenamiento, Bias
es una matriz de OutputSize
por 1
.
Tipos de datos: single
| double
Tasa de aprendizaje y regularización
WeightLearnRateFactor
— Factor de la tasa de aprendizaje de los pesos
1
(predeterminado) | Escalar no negativo
Factor de la tasa de aprendizaje de los pesos, especificado como un escalar no negativo.
El software multiplica este factor por la tasa de aprendizaje global para determinar la tasa de aprendizaje de los pesos de esta capa. Por ejemplo, si WeightLearnRateFactor
es 2
, la tasa de aprendizaje de los pesos de esta capa es dos veces la tasa de aprendizaje global actual. El software determina la tasa de aprendizaje global según la configuración que especifique usando la función trainingOptions
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasLearnRateFactor
— Factor de la tasa de aprendizaje de los sesgos
1
(predeterminado) | Escalar no negativo
Factor de la tasa de aprendizaje de los sesgos, especificado como un escalar no negativo.
El software multiplica este factor por la tasa de aprendizaje global para determinar la tasa de aprendizaje de los sesgos de esta capa. Por ejemplo, si BiasLearnRateFactor
es 2
, la tasa de aprendizaje de los sesgos de esta capa es dos veces la tasa de aprendizaje global actual. El software determina la tasa de aprendizaje global según la configuración que especifique usando la función trainingOptions
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WeightL2Factor
— Factor de regularización L2 de los pesos
1 (predeterminado) | Escalar no negativo
Factor de regularización L2 de los pesos, especificado como un escalar no negativo.
El software multiplica este factor por el factor de regularización global L2 para determinar la regularización L2 de los pesos de esta capa. Por ejemplo, si WeightL2Factor
es 2
, la regularización L2 de los pesos de esta capa es dos veces el factor de regularización global L2. Puede especificar el factor de regularización global L2 usando la función trainingOptions
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
BiasL2Factor
— Factor de regularización L2 de los sesgos
0
(predeterminado) | Escalar no negativo
Factor de regularización L2 de los sesgos, especificado como un escalar no negativo.
El software multiplica este factor por el factor de regularización global L2 para determinar la regularización L2 de los sesgos de esta capa. Por ejemplo, si BiasL2Factor
es 2
, la regularización L2 de los sesgos de esta capa es dos veces el factor de regularización global L2. El software determina el factor de regularización global L2 según la configuración que especifique usando la función trainingOptions
.
Tipos de datos: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Capa
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 trainnet
y dlnetwork
asignan automáticamente nombres a las capas con el nombre ""
.
El objeto FullyConnectedLayer
almacena esta propiedad como un vector de caracteres.
Tipos de datos: char
| string
NumInputs
— Número de entradas
1
(predeterminado)
Esta propiedad o parámetro es de solo lectura.
Número de entradas a la capa, devuelto como 1
. Esta capa solo admite una entrada.
Tipos de datos: double
InputNames
— Nombres de las entradas
{'in'}
(predeterminado)
Esta propiedad o parámetro es de solo lectura.
Nombres de entrada, devueltos como {'in'}
. Esta capa solo admite una entrada.
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, devuelto como 1
. 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 salida, devueltos como {'out'}
. Esta capa solo tiene una salida.
Tipos de datos: cell
Ejemplos
Crear una capa totalmente conectada
Cree una capa totalmente conectada con un tamaño de salida de 10 y de nombre fc1
.
layer = fullyConnectedLayer(10,Name="fc1")
layer = FullyConnectedLayer with properties: Name: 'fc1' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Incluya una capa totalmente conectada en un arreglo Layer
.
layers = [ ...
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,Stride=2)
fullyConnectedLayer(10)
softmaxLayer]
layers = 6x1 Layer array with layers: 1 '' Image Input 28x28x1 images with 'zerocenter' normalization 2 '' 2-D Convolution 20 5x5 convolutions with stride [1 1] and padding [0 0 0 0] 3 '' ReLU ReLU 4 '' 2-D Max Pooling 2x2 max pooling with stride [2 2] and padding [0 0 0 0] 5 '' Fully Connected 10 fully connected layer 6 '' Softmax softmax
Especificar pesos y sesgos iniciales en una capa totalmente conectada
Para especificar las funciones de inicializador de pesos y sesgos, use las propiedades WeightsInitializer
y BiasInitializer
, respectivamente. Para especificar los pesos y sesgos directamente, use las propiedades Weights
y Bias
, respectivamente.
Especificar función de inicialización
Cree una capa totalmente conectada con un tamaño de salida de 10 y especifique que el inicializador de pesos sea el inicializador He.
outputSize = 10; layer = fullyConnectedLayer(outputSize,'WeightsInitializer','he')
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Observe que las propiedades Weights
y Bias
están vacías. Durante el entrenamiento, el software inicializa estas propiedades usando las funciones de inicialización especificadas.
Especificar función de inicialización personalizada
Para especificar su propia función de inicialización de pesos y sesgos, establezca las propiedades WeightsInitializer
y BiasInitializer
en un identificador de función. Para estas propiedades, especifique los identificadores de función que tomen el tamaño de los pesos y sesgos como entrada y devuelvan como salida el valor inicializado.
Cree una capa totalmente conectada con un tamaño de salida de 10 y especifique los inicializadores que muestrean los pesos y sesgos a partir de una distribución gaussiana, con una desviación estándar de 0.0001.
outputSize = 10; weightsInitializationFcn = @(sz) rand(sz) * 0.0001; biasInitializationFcn = @(sz) rand(sz) * 0.0001; layer = fullyConnectedLayer(outputSize, ... 'WeightsInitializer',@(sz) rand(sz) * 0.0001, ... 'BiasInitializer',@(sz) rand(sz) * 0.0001)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 'auto' OutputSize: 10 Learnable Parameters Weights: [] Bias: [] Use properties method to see a list of all properties.
Recuerde que las propiedades Weights
y Bias
están vacías. Durante el entrenamiento, el software inicializa estas propiedades usando las funciones de inicialización especificadas.
Especificar pesos y sesgos directamente
Cree una capa totalmente conectada con un tamaño de salida de 10 y establezca los pesos y sesgos en W
y b
en el archivo MAT FCWeights.mat
, respectivamente.
outputSize = 10; load FCWeights layer = fullyConnectedLayer(outputSize, ... 'Weights',W, ... 'Bias',b)
layer = FullyConnectedLayer with properties: Name: '' Hyperparameters InputSize: 720 OutputSize: 10 Learnable Parameters Weights: [10x720 double] Bias: [10x1 double] Use properties method to see a list of all properties.
Aquí, las propiedades Weights
y Bias
contienen los valores especificados. Durante el entrenamiento, si estas propiedades no están vacías, el software usará los valores especificados como los pesos y sesgos iniciales. En este caso, el software no usa las funciones del inicializador.
Algoritmos
Capa totalmente conectada
Una capa totalmente conectada multiplica la entrada por una matriz de pesos y luego añade un vector de sesgo.
Como su propio nombre indica, todas las neuronas de una capa totalmente conectada se conectan con todas las neuronas de la capa anterior. Esta capa combina todas las características (información local) aprendidas por las capas anteriores en toda la imagen para identificar los patrones más grandes. Para problemas de clasificación, la última capa totalmente conectada combina las características para clasificar las imágenes. Este es el motivo por el que el argumento outputSize
de la última capa totalmente conectada de la red es igual al número de clases del conjunto de datos. Para problemas de regresión, el tamaño de salida debe ser igual al número de variables de respuesta.
También puede ajustar la tasa de aprendizaje y los parámetros de regularización de esta capa usando los argumentos de par nombre-valor correspondientes a la hora de crear la capa totalmente conectada. Si decide no llevar a cabo los ajustes, el software usará los parámetros de entrenamiento globales definidos por la función trainingOptions
.
Si la entrada a la capa es una secuencia (como una red de LSTM), la capa totalmente conectada actúa de manera independiente en cada unidad de tiempo. Por ejemplo, si la capa anterior a la capa totalmente conectada devuelve como salida un arreglo X de D por N por S, la capa totalmente conectada devuelve un arreglo Z de outputSize
por N por S. Durante la unidad de tiempo t, la entrada correspondiente de Z es , donde denota la unidad de tiempo t de X.
Las capas totalmente conectadas aplanan la salida. Codifican los datos espaciales en la dimensión de canal y eliminan las dimensiones espaciales de la salida.
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 que están 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 aquellos para 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 FullyConnectedLayer
y el formato de salida correspondiente. Si el software pasa la salida de la capa a una capa personalizada que no hereda de la clase nnet.layer.Formattable
o a un objeto FunctionLayer
con la propiedad Formattable
establecida en 0
(false
), la capa recibe un objeto dlarray
sin formato con dimensiones ordenadas según los formatos de esta tabla. Los formatos incluidos en esta lista son únicamente un subconjunto. La capa puede ser compatible con formatos adicionales, como aquellos con dimensiones adicionales "S"
(espacial) o "U"
(sin especificar).
Formato de entrada | Formato de salida |
---|---|
|
|
| |
| |
| |
|
|
|
|
| |
| |
|
|
| |
| |
|
|
| |
| |
|
Referencias
[1] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123
[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” Preprint, submitted February 19, 2014. https://arxiv.org/abs/1312.6120.
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 R2016aR2024a: Los objetos DAGNetwork
y SeriesNetwork
no están recomendados
A partir de la versión R2024a, los objetos DAGNetwork
y SeriesNetwork
no están recomendados. En su lugar, utilice los objetos dlnetwork
.
No está previsto eliminar el soporte para los objetos DAGNetwork
y SeriesNetwork
. 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 objetosdlnetwork
, 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 trabajoLayerGraph
ytrainNetwork
.
Para convertir un objeto DAGNetwork
o SeriesNetwork
entrenado en un objeto dlnetwork
, use la función dag2dlnetwork
.
Las capas completamente conectadas se comportan de manera ligeramente diferente en los objetos dlnetwork
en comparación con los objetos DAGNetwork
y SeriesNetwork
. Las capas totalmente conectadas aplanan la salida. Codifican los datos espaciales en la dimensión de canal remodelando los datos de salida. Las capas totalmente conectadas de objetos SeriesNetwork
y DAGNetwork
generan datos con el mismo número de dimensiones espaciales que la entrada, devolviendo datos con dimensiones espaciales de tamaño uno. Las capas totalmente conectadas de objetos dlnetwork
eliminan las dimensiones espaciales de la salida.
R2019a: El inicializador de pesos predeterminado es Glorot
A partir de la versión R2019a, el software inicializa de forma predeterminada los pesos de capa de esta capa utilizando el inicializador Glorot. Este comportamiento ayuda a estabilizar el entrenamiento y habitualmente reduce el tiempo de entrenamiento de las redes profundas.
En versiones anteriores, el software inicializa de forma predeterminada los pesos de las capas mediante un muestreo a partir de una distribución normal con media cero y varianza 0.01. Para reproducir este comportamiento, establezca la opción 'WeightsInitializer'
de la capa en 'narrow-normal'
.
Consulte también
trainnet
| trainingOptions
| dlnetwork
| convolution2dLayer
| reluLayer
| batchNormalizationLayer
| Deep Network Designer
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)