Contenido principal

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

layer = fullyConnectedLayer(outputSize) devuelve una capa totalmente conectada y especifica la propiedad OutputSize.

layer = fullyConnectedLayer(outputSize,Name=Value) establece las propiedades opcionales usando uno o más argumentos nombre-valor.

ejemplo

Argumentos de entrada

expandir todo

Tamaño de salida de la capa totalmente conectada, especificado como entero positivo.

Ejemplo: 10

Argumentos de par nombre-valor

expandir todo

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 varianza 2/(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 varianza 2/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), donde sz 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

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), donde sz 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

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

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

Este argumento establece la propiedad Name.

Tipos de datos: char | string

Propiedades

expandir todo

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 varianza 2/(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 varianza 2/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), donde sz 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

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), donde sz es 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

contraer todo

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

expandir todo

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

expandir todo

Historial de versiones

Introducido en R2016a

expandir todo