27 votos

¿Cómo consigue la CNN '12 de Krizhevsky 253.440 neuronas en la primera capa?

En Alex Krizhevsky, et al. Clasificación de imágenes con redes neuronales convolucionales profundas enumeran el número de neuronas de cada capa (véase el diagrama siguiente).

La entrada de la red tiene 150.528 dimensiones, y el número de neuronas en las capas restantes de la red viene dado por 253.440-186.624-64.896-64.896-43.264- 4096-4096-1000.

CNN

Una visión en 3D

El número de neuronas para todas las capas después de la primera es claro. Una forma sencilla de calcular las neuronas es simplemente multiplicar las tres dimensiones de esa capa ( planes X width X height ):

  • Capa 2: 27x27x128 * 2 = 186,624
  • Capa 3: 13x13x192 * 2 = 64,896
  • etc.

Sin embargo, mirando a la primera capa:

  • Capa 1: 55x55x48 * 2 = 290400

Tenga en cuenta que se trata de no 253,440 como se especifica en el documento.

Calcular el tamaño de salida

La otra forma de calcular el tensor de salida de una convolución es:

Si la imagen de entrada es un tensor 3D nInputPlane x height x width el tamaño de la imagen de salida será será nOutputPlane x owidth x oheight donde

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1 .

(de Documentación de Torch SpatialConvolution )

La imagen de entrada es:

  • nInputPlane = 3
  • height = 224
  • width = 224

Y la capa de convolución es:

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(por ejemplo, el tamaño del núcleo 11 , zancada 4 )

Introduciendo esas cifras obtenemos:

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

Así que nos falta uno para el 55x55 dimensiones que necesitamos para que coincida con el papel. Pueden ser acolchados (pero el cuda-convnet2 establece explícitamente el relleno en 0)

Si tomamos la 54 -tamaño de las dimensiones obtenemos 96x54x54 = 279,936 neuronas: siguen siendo demasiadas.

Así que mi pregunta es la siguiente:

¿Cómo consiguen 253.440 neuronas para la primera capa convolucional? ¿Qué me estoy perdiendo?

11voto

Cameron Murphy Puntos 11

De la nota de Stanfords sobre NN:

Un ejemplo real. La arquitectura de Krizhevsky et al. que ganó el desafío ImageNet en 2012 aceptaba imágenes de tamaño [227x227x3]. En la primera capa convolucional, utilizaba neuronas con tamaño de campo receptivo F=11, zancada S=4 y sin relleno cero P=0. Como (227 - 11)/4 + 1 = 55, y como la capa Conv tenía una profundidad de K=96, el volumen de salida de la capa Conv tenía tamaño [55x55x96]. Cada una de las 55*55*96 neuronas de este volumen estaba conectada a una región de tamaño [11x11x3] en el volumen de entrada. Además, las 96 neuronas de cada columna de profundidad están conectadas a la misma región [11x11x3] de la entrada, pero, por supuesto, con diferentes pesos. Como curiosidad, si se lee el artículo, se afirma que las imágenes de entrada eran 224x224, lo cual es incorrecto porque (224 - 11)/4 + 1 no es un número entero. Esto ha confundido a mucha gente en la historia de las ConvNets y se sabe poco sobre lo que pasó. Mi mejor conjetura es que Alex utilizó un relleno cero de 3 píxeles adicionales que no menciona en el artículo.

ref: http://cs231n.github.io/convolutional-networks/

Estos apuntes acompañan a la clase CS231n de Stanford: Redes neuronales convolucionales para el reconocimiento visual. Para preguntas/preocupaciones/informes de errores, contacte con Justin Johnson en relación con las tareas, o con Andrej Karpathy en relación con los apuntes del curso.

0voto

Moe Puntos 1

Este documento es realmente confuso. En primer lugar, el tamaño de entrada de las imágenes es incorrecto 224x224 no da una salida de 55. Esas neuronas son simplemente como píxeles agrupados en uno, por lo que la salida es una imagen 2D de valores aleatorios (valores de las neuronas). Así que básicamente el número de neuronas = anchuraxalturaxprofundidad, no hay secretos para averiguar esto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X