Main Content

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.

ejemplo

layer = fullyConnectedLayer(outputSize,Name,Value) establece las propiedades opcionales Parámetros e inicialización, Tasa de aprendizaje y regularización y 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

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.

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, 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, 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

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 con el 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, devuelto como 1. Esta capa solo admite una entrada.

Tipos de datos: double

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

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

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

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: []

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

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

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

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 R2016a

expandir todo