Saltar al contenido

¿Cómo calcular el número de parámetros para la red neuronal convolucional?

Al fin luego de tanto luchar hemos dado con la respuesta de esta cuestión que tantos lectores de nuestra web han presentado. Si tienes algún detalle que compartir no dejes de aportar tu conocimiento.

Solución:

Primero veamos cómo se calcula la cantidad de parámetros que se pueden aprender para cada tipo individual de capa que tenga y luego calculemos la cantidad de parámetros en su ejemplo.

  • Capa de entrada: Todo lo que hace la capa de entrada es leer la imagen de entrada, por lo que no hay parámetros que pueda aprender aquí.
  • Capas convolucionales: Considere una capa convolucional que toma l mapas de características en la entrada, y tiene k mapas de características como salida. El tamaño del filtro es n X m. Por ejemplo, esto se verá así:

    Visualización de una capa convolucional

    Aquí, la entrada tiene l=32 mapas de características como entrada, k=64 mapas de características como salida, y el tamaño del filtro es n=3 X m=3. Es importante comprender que no tenemos simplemente un filtro de 3×3, sino un filtro de 3x3x32, ya que nuestra entrada tiene 32 dimensiones. Y aprendemos 64 filtros 3x3x32 diferentes. Por lo tanto, el número total de pesos es n*m*k*l. Luego, también hay un término de sesgo para cada mapa de características, por lo que tenemos un número total de parámetros de (n*m*l+1)*k.

  • Agrupación de capas: Las capas de agrupación, por ejemplo, hacen lo siguiente: “reemplazar un vecindario de 2×2 por su valor máximo”. Por lo tanto, no hay ningún parámetro que pueda aprender en una capa de agrupación.
  • Capas totalmente conectadas: En una capa totalmente conectada, todas las unidades de entrada tienen un peso independiente para cada unidad de salida. Para n entradas y m salidas, el número de pesos es n*m. Además, tiene un sesgo para cada nodo de salida, por lo que está en (n+1)*m parámetros
  • Capa de salida: La capa de salida es una capa normal totalmente conectada, por lo que (n+1)*m parámetros, donde n es el número de entradas y m es el número de salidas.

La dificultad final es la primera capa completamente conectada: no conocemos la dimensionalidad de la entrada a esa capa, ya que es una capa convolucional. Para calcularlo, debemos comenzar con el tamaño de la imagen de entrada y calcular el tamaño de cada capa convolucional. En su caso, Lasagne ya calcula esto por usted e informa los tamaños, lo que nos lo pone fácil. Si tienes que calcular tú mismo el tamaño de cada capa, es un poco más complicado:

  • En el caso más simple (como su ejemplo), el tamaño de la salida de una capa convolucional es input_size - (filter_size - 1), en su caso: 28 – 4 = 24. Esto se debe a la naturaleza de la convolución: usamos, por ejemplo, un vecindario de 5×5 para calcular un punto, pero las dos filas y columnas más externas no tienen un vecindario de 5×5, por lo que podemos No calcule ninguna salida para esos puntos. Es por eso que nuestra salida es 2*2=4 filas/columnas más pequeñas que la entrada.
  • Si uno no quiere que la salida sea más pequeña que la entrada, puede rellenar con ceros la imagen (con el pad parámetro de la capa convolucional en Lasaña). Por ejemplo, si agrega 2 filas/columnas de ceros alrededor de la imagen, el tamaño de salida será (28+4)-4=28. Entonces, en caso de relleno, el tamaño de salida es input_size + 2*padding - (filter_size -1).
  • Si desea explícitamente reducir la resolución de su imagen durante la convolución, puede definir un paso, por ejemplo stride=2, lo que significa que mueves el filtro en pasos de 2 píxeles. Entonces, la expresión se convierte en ((input_size + 2*padding - filter_size)/stride) +1.

En tu caso, los cálculos completos son:

  #  name                           size                 parameters
---  --------  -------------------------    ------------------------
  0  input                       1x28x28                           0
  1  conv2d1   (28-(5-1))=24 -> 32x24x24    (5*5*1+1)*32   =     832
  2  maxpool1                   32x12x12                           0
  3  conv2d2   (12-(3-1))=10 -> 32x10x10    (3*3*32+1)*32  =   9'248
  4  maxpool2                     32x5x5                           0
  5  dense                           256    (32*5*5+1)*256 = 205'056
  6  output                           10    (256+1)*10     =   2'570

Entonces, en su red, tiene un total de 832 + 9’248 + 205’056 + 2’570 = 217’706 parámetros que se pueden aprender, que es exactamente lo que informa Lasagne.

construyendo sobre la excelente respuesta de @hbaderts, se me ocurrió una fórmula para una red ICPCPHO (ya que estaba trabajando en un problema similar), compartirla en la figura a continuación, puede ser útil.

ingrese la descripción de la imagen aquí

Además, (1) capa de convolución con zancada de 2×2 y (2) capa de convolución con zancada de 1×1 + agrupación (máx./promedio) con zancada de 2×2, cada una aporta la misma cantidad de parámetros con el mismo relleno, como se puede ver a continuación:

ingrese la descripción de la imagen aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *