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 usando uno o más argumentos nombre-valor.layer = fullyConnectedLayer(outputSize,Name=Value)
Argumentos de entrada
Tamaño de salida de la capa totalmente conectada, especificado como entero positivo.
Ejemplo: 10
Argumentos de par nombre-valor
Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.
En las versiones anteriores a la R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.
Ejemplo: fullyConnectedLayer(10,Name="fc1") crea una capa totalmente conectada con un tamaño de salida de 10 y de nombre 'fc1'.
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), dondeszes 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
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), dondeszes 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
Pesos de capa iniciales, 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
Sesgos de capa iniciales, 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
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
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
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
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
Propiedades
Totalmente conectada
Tamaño de salida de la capa totalmente conectada, especificado como entero positivo.
Ejemplo: 10
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
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), dondeszes 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
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), dondeszes el tamaño de los sesgos.
La capa inicializa los sesgos solo cuando la propiedad Bias está vacía.
El objeto FullyConnectedLayer almacena esta propiedad como un vector de caracteres o un identificador de función.
Tipos de datos: char | string | function_handle
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, la función trainnet usa 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
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 la propiedad Bias no está vacía, la función trainnet usa 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
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
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
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
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
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 sin nombre.
El objeto FullyConnectedLayer almacena esta propiedad como un vector de caracteres.
Tipos de datos: char | string
Esta propiedad o parámetro es de solo lectura.
Número de entradas a la capa, almacenado como 1. Esta capa solo admite una entrada.
Tipos de datos: double
Esta propiedad o parámetro es de solo lectura.
Nombres de entrada, almacenados como {'in'}. Esta capa solo admite una entrada.
Tipos de datos: cell
Esta propiedad o parámetro es de solo lectura.
Número de salidas de la capa, almacenado como 1. Esta capa solo tiene una salida.
Tipos de datos: double
Esta propiedad o parámetro es de solo lectura.
Nombres de salida, almacenados como {'out'}. Esta capa solo tiene una salida.
Tipos de datos: cell
Ejemplos
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: []
Show 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 =
6×1 Layer array with layers:
1 '' Image Input 28×28×1 images with 'zerocenter' normalization
2 '' 2-D Convolution 20 5×5 convolutions with stride [1 1] and padding [0 0 0 0]
3 '' ReLU ReLU
4 '' 2-D Max Pooling 2×2 max pooling with stride [2 2] and padding [0 0 0 0]
5 '' Fully Connected 10 fully connected layer
6 '' Softmax softmax
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: []
Show 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: []
Show 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: [10×720 double]
Bias: [10×1 double]
Show 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
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.
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. El formato consta de uno o más de estos caracteres:
"S": espacial"C": canal"B": lote"T": tiempo"U": sin especificar
Por ejemplo, puede describir 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, 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
Notas y limitaciones de uso:
La generación de código no permite pasar objetos dlarray con dimensiones (U) sin especificar a esta capa.
Consulte las notas de uso y las limitaciones de la sección Generación de código C/C++. Las mismas limitaciones se aplican a la generación de código GPU.
Historial de versiones
Introducido en R2016aA 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
dlnetworkson 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
dlnetworkadmiten una gama más amplia de arquitecturas de red que puede crear o importar desde plataformas externas.La función
trainnetadmite 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
dlnetworksuele ser más rápido que los flujos de trabajoLayerGraphytrainNetwork.
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.
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 | exportNetworkToSimulink | Fully Connected Layer
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- 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)