Red neuronal gráfica: convolución, agrupación, conexión completa (la cantidad de canales, el concepto de kernel y filtro)

operación de convolución

Esto no es difícil de entender. Sabemos que una imagen se compone de píxeles individuales en una computadora, que se pueden representar mediante una matriz.
Suponiendo una imagen de entrada de 5x5, definimos una matriz de 3x3 (los valores en los que se generan aleatoriamente)
inserte la descripción de la imagen aquí
y luego tomamos este núcleo de convolución, en la imagen de entrada, seleccionamos la matriz de 3x3 en la esquina superior izquierda y usamos el núcleo de convolución y este Multiplica las posiciones correspondientes de la matriz, y luego obtiene 9 números, suma estos 9 números y finalmente obtiene un resultado.
inserte la descripción de la imagen aquí
Luego mueva el kernel de convolución un espacio a la derecha, continúe repitiendo el cálculo anterior y obtenga otro número.
inserte la descripción de la imagen aquí
Luego, después del cálculo, continúe moviéndose hacia la derecha y calcule nuevamente,
inserte la descripción de la imagen aquí
el valor obtenido por los tres cálculos se
inserte la descripción de la imagen aquí
mueve hacia abajo un espacio y continúa repitiendo la operación anterior hasta que hayamos calculado la imagen de entrada completa de 5x5 y obtenido 9 cálculos Este es el resultado
inserte la descripción de la imagen aquí
de nuestra convolución, toda esta operación es la operación de convolución.
Luego hay algunas preguntas:

  • P1: ¿Cada movimiento a la derecha puede ser solo 1 espacio?
  • R1: No, mover 1 cuadrado significa que el tamaño del paso es 1. Si configuramos el tamaño del paso en 2, luego movemos 2 cuadrados cada vez, y el stridetamaño del paso lo establecemos nosotros
  • P2: ¿Cómo se establece el valor en el kernel de convolución?
  • A2: Inicialmente generado aleatoriamente (aprenderá y actualizará más tarde)
  • P3: Entonces, después de la convolución, ¿la imagen debe volverse más pequeña?
  • R3: No, en el ejemplo anterior, la entrada de 5x5 se convolucionó para obtener 3x3, luego, si llenamos un círculo con la imagen de 5x5, se convierte en una imagen de 7x7, y luego usamos este núcleo de convolución para la convolución. Obtendrás un 5x5 producción. En la práctica, hacemos esto, hay un parámetro paddingque indica si se debe llenar, podemos establecer el rango de llenado y el valor de llenado, generalmente se llena con 0.

Por cierto, agregue una fórmula:
suponiendo que la imagen de entrada es W x W, el tamaño del kernel de convolución es FxF, el tamaño del paso es stride=S y el relleno se establece en P (el número de píxeles rellenos), entonces el
tamaño de la imagen de salida = (W - F +2P)/S +1

Luego, después de entender todo el proceso de convolución, se puede entender la siguiente imagen.
Esta figura muestra que la imagen de entrada es 5x5, el kernel de convolución es 3x3, el tamaño de paso es 1, relleno = 1, por lo que la salida es 5x5
inserte la descripción de la imagen aquí

Operación real

El proceso de convolución es como se mencionó anteriormente, cuando realmente escribimos el código, podemos implementar cada paso sin tanto problema.
El marco ya ha encapsulado las funciones correspondientes para nosotros. Solo necesitamos llamar a la función y pasarle los parámetros relevantes.
Tomemos el marco pytorch como ejemplo (tensorflow es similar).
Necesitamos configurar los siguientes parámetros al operar Conv2d:
inserte la descripción de la imagen aquí
Expliquemos algunos de los más utilizados:

  • in_channels: el número de canales de entrada
  • out_channels: el número de canales de salida
  • kernel_size: El tamaño del kernel de convolución, el tipo es int o tuple. Cuando la convolución es cuadrada, solo se requiere una longitud de lado entera. Si la convolución no es cuadrada, se debe ingresar una tupla para indicar la altura y el ancho. (No es necesario que usted configure el kernel de convolución, solo se le debe asignar un tamaño y el valor interno se genera aleatoriamente)
  • zancada: tamaño de paso (es decir, mover unos pocos píxeles cada vez, el valor predeterminado es 1)
  • relleno: cuántos círculos rellenar, el valor predeterminado es 0, sin relleno (el valor del relleno es 0)
  • dilatación: controle el espacio entre los núcleos de convolución (establezca esto para hacer convolución de agujeros)
  • grupos: controlar las conexiones entre entradas y salidas
  • sesgo: sesgo, ya sea para agregar un sesgo aprendido a la salida, el valor predeterminado es Verdadero
  • padding_mode: establecer el modo de relleno

filtro y núcleo

Aquí nos enfocamos en explicar la siguiente cantidad de canales:
supongamos que una imagen es 6x6, la cantidad de canales es 1 (como una imagen en blanco y negro), el tamaño del kernel de convolución es 3x3, el tamaño del paso es 1, sin relleno (el relleno es 0) no lo consideraremos por el
momento out_channelsEl problema de configuración se discutirá más adelante.
Es decir, la configuración actual del parámetro es: in_channels=1 kernel_size=3 stride=1 padding=0
podemos calcular esto, la imagen de salida es 4x4, dibujé un diagrama esquemático, puede verlo:
inserte la descripción de la imagen aquí
entonces también sabemos que la imagen rgb es de tres canales, entonces si la imagen de arriba es una imagen rgb, ¿cuál es el resultado de salida?
En otras palabras, la configuración de los parámetros es: como se muestra en in_channels=3 kernel_size=3 stride=1 padding=0
la figura: nuestro resultado de salida sigue siendo 1 canal.
inserte la descripción de la imagen aquí

Se puede ver que el núcleo de convolución aquí se ha convertido en tres superposiciones.
Algunos estudiantes simplemente entienden la operación de convolución de un solo canal anterior, pero no entienden la operación de convolución de múltiples canales.
Cuando su imagen de entrada es de tres canales, el kernel de convolución también es de tres canales.
De hecho in_channels, el punto clave es in_channelsque es el número de canales de entrada, y también es el número de canales del filtro.
kernelLo llamamos kernel de convolución, el tamaño es 3x3
, y si la entrada es una imagen de tres canales, entonces nuestro kernel de convolución también será de tres canales.
Llamamos a un kernel de convolución de una sola capa kerneluna pila de múltiples capas y esto es llamado filterfiltro.

Nota: Esta explicación no es correcta, es solo para facilitar su comprensión . En cuanto al significado específico de kernely filter, hay razones históricas, estos términos también son tomados de otras disciplinas, y el aprendizaje actual de las redes neuronales no necesita estudiar kernely filterreferirse a nada en detalle, siempre que se entienda que estas son núcleos de convolución. También puedes ver la explicación dada por los alumnos en la zona de comentarios de esta entrada del blog

inserte la descripción de la imagen aquí
Cuando su imagen de entrada es de tres canales, el kernel de convolución también es de tres canales.
La operación entre ellos la realiza este nuevo núcleo de convolución (con 27 números) y la posición correspondiente de la imagen de entrada.
Los 27 números se multiplican respectivamente por los 27 números en la imagen de entrada y luego se suman para obtener un número. Repita este cálculo y revise toda la imagen de entrada para obtener 16 números.
Como se muestra en la imagen:
inserte la descripción de la imagen aquí

Por lo tanto, el resultado del cálculo también es un resultado unidimensional, es decir, el resultado de un solo canal.

Por lo tanto, los conceptos de kernel y filtro son claros.
kernel: El núcleo es una matriz 2D, largo × ancho.
filter: El filtro es un cubo tridimensional, largo × ancho × profundidad, donde la profundidad es la cantidad de núcleos que lo componen.
Se puede decir que el núcleo es el elemento básico del filtro, y múltiples núcleos forman un filtro.
De hecho, tanto el kernel como el filtro son esencialmente kernels de convolución, pero uno corresponde a un solo canal y el otro corresponde a múltiples canales, por lo que
la filterdimensión depende de la cantidad de canales de entrada.

Entonces hay dos preguntas: ¿
Cuántos núcleos debe contener un filtro? La respuesta es: ¿ Cuántos filtros debe haber en una capa determinada
por el número de canales de entrada ? La respuesta es: dependiendo de cuántas funciones queramos extraer, un filtro se encarga de extraer una determinada función, y podemos configurar tantos filtros como queramos generar. Entonces, ¿cuáles son los parámetros para configurar el filtro? Es lo que no mencionamos antes . No olvides que también se puede configurar manualmente. En la imagen de arriba, el resultado de una operación de filtro es un solo canal. Si lo configura, el canal de salida será 2. como muestra la imagen:in_channels



out_channels
out_channelsout_channels=2

inserte la descripción de la imagen aquí

entonces. En resumen.
filterHay varios que determinan el número de canales de salida
. Cuando escribimos código, no necesitamos especificar el número de filtros, sino especificar directamente el canal de salida, por lo que el canal de salida es nuestro hiperparámetro.
in_channelsSe determina el número de canales del filtro, out_channelsy la configuración del filtro determina el número de filtros.El resultado de esta capa de convolución out_channelses la siguiente capa in_channels.
Entonces, out_channelsy in_channelsno está relacionado.

capa convolucional 1x1

La capa de convolución 1x1 es una capa de convolución especial.
La altura y el ancho del núcleo de convolución son iguales a 1, lo que significa que no reconocerá la información espacial, porque solo mira un píxel espacial a la vez, por lo que no reconocerá la información espacial en el canal.
Pero a menudo lo usamos para fusionar canales.
Su valor de salida es equivalente a ponderar los valores de diferentes canales en la posición de entrada correspondiente y
1 1. La función del núcleo de convolución es fusionar la información de diferentes canales, lo que puede considerarse como sin espacio. La coincidencia es simplemente fusionar directamente el canal de entrada y el canal de salida en la capa de entrada, lo que equivale a colocar toda la entrada en un vector, y el número de canales es igual a la cantidad de características.1 La capa convolucional de
1
es equivalente a una capa completamente conectada, no haga ninguna información de control, porque la capa completamente conectada no considera la información espacial, solo considera la fusión en la dimensión de la característica (es decir, la dimensión del canal de entrada)

ejemplo visual

Podemos usar una red LeNET5 real para ver lo que acabamos de explicar.
inserte la descripción de la imagen aquí
Esta entrada es una imagen digital manuscrita de 32x32
6@28x28 significa: el canal de salida de la primera capa convolucional es 6, el tamaño de salida es 28x28
La segunda es la capa de agrupación, el número de canales sigue siendo el mismo, o 6, el tamaño se reduce a la mitad , y se convirtió en 14x14,
la tercera sigue siendo una capa convolucional, 16 canales, tamaño 10x10
y luego la cuarta es una capa de agrupación, 16 canales, tamaño 5x5,
y finalmente con dos capas completamente conectadas
y finalmente el resultado de salida.

La primera capa de LeNET5 es una capa convolucional, los datos de entrada son 32x32x1, el tamaño del kernel de convolución es 5x5, el tamaño de paso = 1, relleno = 0 y la salida es 6 @ 28 × 28. Entonces, la entrada aquí es única -channel, es
decir in_channels=1, entonces la profundidad del filtro es 1, pero el requerimiento del canal de salida es 6, es decir, se out_channels=6
requieren 6 filtros, y finalmente se obtienen 6 imágenes de 28x28.
Como se muestra en la figura: Este es el modelo de visualización de red de todo el LeNET5, el azul es de 32x32, después de la convolución se obtiene la siguiente capa, que es la capa amarilla, pueden ver que la capa amarilla es un Cubo, nosotros puede desplegarlo y
inserte la descripción de la imagen aquí
ver: Después de desplegar, de hecho hay seis resultados de 28 x 28.
inserte la descripción de la imagen aquí
La dirección del sitio web de esta visualización es: https://tensorspace.org/index.html

puesta en común

Después de comprender la operación de convolución, la agrupación es mucho más simple. La operación de agrupación consiste en utilizar un núcleo, como 3x3, para ir a la posición correspondiente a 3x3 en la imagen de entrada y seleccionar el mayor de estos nueve números como resultado de salida. Esto se llama agrupación máxima.
Canal de salida = canal de entrada
(cuando se ingresan múltiples canales, cada canal debe agruparse)
inserte la descripción de la imagen aquí

conexión completa

La capa completamente conectada generalmente se encuentra al final de la red neuronal convolucional. Su entrada es el resultado obtenido por la agrupación de convolución anterior.Para " aplanar " el resultado es aplanar la matriz de resultados obtenida en un vector columna. Entonces, ¿cómo funciona la conexión completa en este vector de columna?
inserte la descripción de la imagen aquí
Como se muestra en la figura, suponiendo que x1, x2 y x3 a la izquierda son los vectores obtenidos después de aplanar, entonces usamos x 1 × w 11 + x 2 × w 21 + x 3 × w 31 = b 1 x_1\ veces w_{11} +x_2\veces w_{21}+x_3\veces w_{31}=b_1X1×w11+X2×w21+X3×w31=b1
De la misma manera, b2 también se calcula de esta manera. Este proceso de cálculo se puede expresar como una operación matricial,
inserte la descripción de la imagen aquí
en esta operación, siempre que aumentemos el número de columnas en la matriz w, podemos obtener diferentes números de resultados. Por ejemplo, si w se establece en 3x3, se obtendrá el resultado de 1x3. Entonces, la capa completamente conectada genera una columna de vectores y el número de resultados finales que podemos definir.
¿Entonces cuál es el punto?
Las capas totalmente conectadas (FC) desempeñan el papel de "clasificador" en toda la red neuronal convolucional. Si operaciones como la capa convolucional, la capa de agrupación y la capa de función de activación asignan los datos originales al espacio de características de la capa oculta, la capa completamente conectada desempeña el papel de asignar la "representación de características distribuidas" aprendida al espacio de etiqueta de muestra . .
Si lo hace, puede reducir el impacto de la posición de la característica en la clasificación. Originalmente, el mapa de características es una matriz, por lo que la posición de la característica tiene un impacto en la clasificación. Por ejemplo, para identificar el gato en la imagen, el gato es en la esquina superior izquierda de la imagen, entonces la esquina superior izquierda puede ser Si se detecta, no se puede detectar en la esquina inferior derecha.Sin embargo, nuestra matriz bidimensional está integrada en una salida de valor a través del totalmente conectado capa. Este valor es la probabilidad predicha del gato. No importa dónde esté el gato, siempre que la probabilidad sea grande, hay gatos. Hacerlo ignora las características de la estructura espacial y mejora la robustez.

Supongo que te gusta

Origin blog.csdn.net/holly_Z_P_F/article/details/122377935
Recomendado
Clasificación