tutorial redes neuronales neuronal learning funcionan filtro explicacion convolucionales convolucional como machine-learning neural-network deep-learning conv-neural-network

machine learning - redes - ¿Qué es la profundidad de una red neuronal convolucional?



redes neuronales convolucionales pdf (8)

Dado que el volumen de entrada cuando estamos haciendo un problema de clasificación de imagen es N x N x 3 . Al principio no es difícil imaginar lo que significará la profundidad, solo la cantidad de canales: Red, Green, Blue . Ok, entonces el significado para la primera capa es claro. Pero, ¿y los próximos? Aquí es cómo trato de visualizar la idea.

  1. En cada capa aplicamos un conjunto de filtros que se convolucionan alrededor de la entrada. Imaginemos que actualmente estamos en la primera capa y convolvemos alrededor de un volumen V de tamaño N x N x 3 . Como @Semih Yagcioglu mencionó al principio, estamos buscando algunas características aproximadas: curvas, bordes, etc. Digamos que aplicamos N filtros del mismo tamaño (3x3) con paso 1. Entonces, cada uno de estos filtros busca una diferencia curva o borde mientras se convoluciona alrededor de V Por supuesto, el filtro tiene la misma profundidad, queremos suministrar toda la información no solo la representación en escala de grises.

  2. Ahora, si los filtros M buscarán M curvas o bordes diferentes. Y cada uno de estos filtros producirá un mapa de características que consta de escalares (el significado del escalar es el filtro que dice: La probabilidad de tener esta curva aquí es X%). Cuando convolvemos con el mismo filtro alrededor del volumen obtenemos este mapa de escalares que nos dice dónde exactamente vimos la curva.

  3. Luego viene el apilamiento de mapas de características. Imagine apilar como lo siguiente. Tenemos información sobre dónde cada filtro detectó una curva determinada. Bien, cuando los apilamos obtenemos información sobre qué curvas / aristas están disponibles en cada pequeña parte de nuestro volumen de entrada. Y esta es la salida de nuestra primera capa convolucional.

  4. Es fácil comprender la idea detrás de la no linealidad cuando se tiene en cuenta 3 . Cuando aplicamos la función ReLU en algún mapa de características, decimos: elimine todas las probabilidades negativas para curvas o aristas en esta ubicación. Y esto ciertamente tiene sentido.

  5. Luego la entrada para la siguiente capa será un Volumen $ V_1 $ que contiene información sobre diferentes curvas y bordes en diferentes ubicaciones espaciales (Recuerde: cada capa contiene información sobre 1 curva o borde).

  6. Esto significa que la siguiente capa podrá extraer información sobre formas más sofisticadas al combinar estas curvas y bordes. Para combinarlos, nuevamente, los filtros deben tener la misma profundidad que el volumen de entrada.
  7. De vez en cuando aplicamos Pooling. El significado es exactamente reducir el volumen. Dado que cuando usamos zancadas = 1, generalmente miramos un píxel (neurona) demasiadas veces para la misma función.

Espero que esto tenga sentido. Mire los asombrosos gráficos proporcionados por el famoso curso CS231 para verificar cómo se calcula exactamente la probabilidad de cada característica en una ubicación determinada.

Estaba echando un vistazo a Convolutional Neural Network de CS231n Convolutional Neural Networks for Visual Recognition . En la red neuronal convolucional, las neuronas están dispuestas en 3 dimensiones ( height , width , depth ). Estoy teniendo problemas con la depth de la CNN. No puedo visualizar lo que es.

En el enlace, dijeron The CONV layer''s parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume The CONV layer''s parameters consist of a set of learnable filters. Every filter is small spatially (along width and height), but extends through the full depth of the input volume .

Por ejemplo, mirad esta imagen. Lo siento si la imagen es muy mala.

Puedo captar la idea de que tomamos un área pequeña de la imagen, luego la comparamos con los "Filtros". ¿Entonces los filtros serán colección de imágenes pequeñas? También dijeron We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron. We will connect each neuron to only a local region of the input volume. The spatial extent of this connectivity is a hyperparameter called the receptive field of the neuron. Entonces, ¿el campo receptivo tiene la misma dimensión que los filtros? ¿También cuál será la profundidad aquí? ¿Y qué significa usar la profundidad de una CNN?

Entonces, mi pregunta es principalmente, si tomo una imagen con una dimensión de [32*32*3] (digamos que tengo 50000 de estas imágenes, haciendo el conjunto de datos [50000*32*32*3] ), ¿qué elegiré? como su profundidad y lo que significaría por la profundidad. ¿También cuál será la dimensión de los filtros?

También será de mucha ayuda si alguien puede proporcionar algún enlace que brinde cierta intuición sobre esto.

EDITAR: Entonces en una parte del tutorial (parte del ejemplo del mundo real), dice The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96]. The Krizhevsky et al. architecture that won the ImageNet challenge in 2012 accepted images of size [227x227x3]. On the first Convolutional Layer, it used neurons with receptive field size F=11, stride S=4 and no zero padding P=0. Since (227 - 11)/4 + 1 = 55, and since the Conv layer had a depth of K=96, the Conv layer output volume had size [55x55x96].

Aquí vemos que la profundidad es 96. Entonces, ¿la profundidad es algo que elijo arbitrariamente? o algo que calculo? También en el ejemplo anterior (Krizhevsky et al) tenían 96 profundidades. Entonces, ¿qué significa con sus 96 profundidades? También el tutorial indicado Every filter is small spatially (along width and height), but extends through the full depth of the input volume .

¿Entonces eso significa que la profundidad será así? Si es así, ¿puedo suponer que Depth = Number of Filters ?


En Deep Neural Networks, la profundidad se refiere a qué tan profunda es la red, pero en este contexto, la profundidad se utiliza para el reconocimiento visual y se traduce en la tercera dimensión de una imagen.

En este caso, tiene una imagen, y el tamaño de esta entrada es 32x32x3 que es (width, height, depth) . La red neuronal debería poder aprender en base a estos parámetros a medida que la profundidad se traduce a los diferentes canales de las imágenes de entrenamiento.

ACTUALIZAR:

En cada capa de su CNN aprende regularidades sobre imágenes de entrenamiento. En las primeras capas, las regularidades son curvas y bordes, luego, cuando profundizas en las capas, comienzas a aprender niveles más altos de regularidades como colores, formas, objetos, etc. Esta es la idea básica, pero contiene muchos detalles técnicos. Antes de ir más lejos, dar una oportunidad: http://www.datarobot.com/blog/a-primer-on-deep-learning/

ACTUALIZACIÓN 2:

Eche un vistazo a la primera figura en el enlace que proporcionó. Dice ''En este ejemplo, la capa de entrada roja contiene la imagen, por lo que su ancho y alto serían las dimensiones de la imagen, y la profundidad sería 3 (canales rojo, verde, azul)''. Significa que una neurona ConvNet transforma la imagen de entrada organizando sus neuronas en tres dimeonas.

Como respuesta a su pregunta, la profundidad corresponde a los diferentes canales de color de una imagen.

Por otra parte, sobre la profundidad del filtro. El tutorial lo dice.

Cada filtro es pequeño espacialmente (a lo ancho y alto), pero se extiende a través de la profundidad total del volumen de entrada.

Lo que básicamente significa que un filtro es una parte más pequeña de una imagen que se mueve alrededor de la profundidad de la imagen para aprender las regularidades de la imagen.

ACTUALIZACIÓN 3:

Para el ejemplo del mundo real, recién hojeé el documento original y dice esto: la primera capa convolucional filtra la imagen de entrada de 224 × 224 × 3 con 96 núcleos de tamaño 11 × 11 × 3 con una zancada de 4 píxeles.

En el tutorial se refiere a la profundidad como el canal, pero en el mundo real puede diseñar cualquier dimensión que desee. Después de todo, ese es tu diseño

El tutorial tiene como objetivo darte una idea de cómo funciona ConvNets en teoría, pero si diseño una ConvNet nadie puede evitar que proponga una con una profundidad diferente .

¿Tiene esto algún sentido?


En términos simples, puede explicar lo siguiente,

Supongamos que tiene 10 filtros donde cada filtro tiene el tamaño de 5x5x3 . ¿Qué significa esto? la profundidad de esta capa es 10, que es igual a la cantidad de filtros. El tamaño de cada filtro se puede definir como queremos, por ejemplo, 5x5x3 en este caso donde 3 es la profundidad de la capa anterior. Para ser precisos, la profundidad de cada archivador en la capa siguiente debe ser 10 (nxnx10) donde n se puede definir como desea 5 o algo más. Hope aclarará todo.


La profundidad de la capa CONV es la cantidad de filtros que está usando. La profundidad de un filtro es igual a la profundidad de la imagen que está utilizando como entrada.

Por ejemplo: supongamos que está utilizando una imagen de 227 * 227 * 3. Ahora suponga que está utilizando un filtro de tamaño 11 * 11 (tamaño espacial). Este cuadrado de 11 * 11 se deslizará a lo largo de toda la imagen para producir una única matriz bidimensional como respuesta. Pero para hacerlo, debe cubrir todos los aspectos dentro del área 11 * 11. Por lo tanto, la profundidad del filtro será la profundidad de la imagen = 3. Ahora supongamos que tenemos 96 filtros de ese tipo, cada uno produciendo una respuesta diferente. Esta será la profundidad de la capa Convolucional. Es simplemente el número de filtros utilizados.


La profundidad de la red es el número de capas en la red. En el documento de Krizhevsky , la profundidad es de 9 capas (¿es un problema de poste de cerca sobre cómo se cuentan las capas?).


La profundidad es la cantidad de filtros que mira la imagen. Digamos que su entrada es una imagen RGB. Entonces tiene 3 canales y la profundidad es 3. Luego debe aplicar 5 filtros. Ahora recuerde que cada filtro está mirando los 3 canales de la imagen. Entonces cada filtro producirá un mapa de características. Así que, en general, 5 mapas de características.


Lo primero que debe tener en cuenta es

receptive field of a neuron is 3D

es decir, si el campo receptivo es 5x5, la neurona se conectará a una cantidad de puntos de 5x5x (profundidad de entrada). Entonces, cualquiera que sea su profundidad de entrada, una capa de neuronas solo desarrollará 1 capa de salida.

Ahora, lo siguiente a tener en cuenta es

depth of output layer = depth of conv. layer

es decir, el volumen de salida es independiente del volumen de entrada, y solo depende de los filtros de número (profundidad). Esto debería ser bastante obvio desde el punto anterior.

Tenga en cuenta que la cantidad de filtros (profundidad de la capa cnn) es un hiper parámetro. Puede tomarlo como lo desee, independientemente de la profundidad de la imagen. Cada filtro tiene su propio conjunto de pesos que le permite aprender una función diferente en la misma región local cubierta por el filtro.


No estoy seguro de por qué esto se escatima demasiado. También tuve problemas para entenderlo al principio, y muy pocos fuera de Andrej Karpathy (gracias d00d) lo han explicado. Aunque, en su descripción ( http://cs231n.github.io/convolutional-networks/ ), calcula la profundidad del volumen de salida utilizando un ejemplo diferente al de la animación.

Comience leyendo la sección titulada '' Numpy examples ''

Aquí, vamos iterativamente.

En este caso, tenemos un 11x11x4. (Por qué empezamos con 4 es algo peculiar, ya que sería más fácil de entender con una profundidad de 3)

Realmente presta atención a esta línea:

Una columna de profundidad (o una fibra) en la posición (x, y) serían las activaciones X [x, y ,:].

Un corte de profundidad, o equivalente a un mapa de activación en la profundidad d, serían las activaciones X [:,:, d].

V[0,0,0] = np.sum(X[:5,:5,:] * W0) + b0

V es tu volumen de salida. El cero ° índice v [0] es su columna, en este caso V[0] = 0 esta es la primera columna en su volumen de salida. V[1] = 0 esta es la primera fila en su volumen de salida. V[3]= 0 es la profundidad. Esta es la primera capa de salida.

Ahora, aquí es donde la gente se confunde (al menos yo lo hice). La profundidad de entrada no tiene absolutamente nada que ver con la profundidad de salida. La profundidad de entrada solo tiene control de la profundidad del filtro. W en el ejemplo de Andrej.

Aparte: Mucha gente se pregunta por qué 3 es la profundidad de entrada estándar. Para imágenes de entrada de color, esto siempre será 3 para imágenes simples.

np.sum(X[:5,:5,:] * W0) + b0 (convolución 1)

Aquí, estamos calculando elemento a elemento entre un vector de peso W0 que es 5x5x4. 5x5 es una elección arbitraria. 4 es la profundidad, ya que tenemos que coincidir con nuestra profundidad de entrada. El vector de peso es su filtro, kernel, campo receptivo o cualquier nombre ofuscado que las personas decidan llamar por el camino.

si vienes de un fondo que no es python, quizás sea por eso que hay más confusión ya que la notación de corte de matriz no es intuitiva. El cálculo es un producto escalar de su primer tamaño de convolución (5x5x4) de su imagen con el vector de peso. La salida es un valor escalar único que toma la posición de su primera matriz de salida de filtro. Imagine una matriz de 4 x 4 que representa el producto suma de cada una de estas operaciones de convolución en toda la entrada. Ahora apilarlos para cada filtro. Eso le dará su volumen de salida. En el escrito de Andrej, comienza a moverse a lo largo del eje x. El eje y sigue siendo el mismo.

Aquí hay un ejemplo de cómo se vería V[:,:,0] en términos de convoluciones. Recuerde aquí, el tercer valor de nuestro índice es la profundidad de su capa de salida

[result of convolution 1, result of convolution 2, ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., ..., ...] [..., ..., ..., result of convolution n]

La animación es la mejor para entender esto, pero Andrej decidió intercambiarla con un ejemplo que no coincide con el cálculo anterior.

Esto me llevó un tiempo. En parte porque numpy no indexa la forma en que Andrej lo hace en su ejemplo, al menos no jugué con eso. Además, hay algunas suposiciones de que la operación del producto suma es clara. Esa es la clave para entender cómo se crea su capa de salida, qué representa cada valor y cuál es la profundidad.

¡Espero que eso ayude!