Estaba revisando los documentos de convolución de Keras y he encontrado dos tipos de convulsiones Conv1D y Conv2D. Hice una búsqueda en la web y esto es lo que entiendo sobre Conv1D y Conv2D; Conv1D se usa para secuencias y Conv2D usa para imágenes.
Siempre pensé que las redes de convolución nerual se usaban solo para imágenes y visualizaban CNN de esta manera
Una imagen se considera como una matriz grande y luego un filtro se deslizará sobre esta matriz y calculará el producto de puntos. Esto creo lo que Keras menciona como un Conv2D. Si Conv2D funciona de esta manera, ¿cuál es el mecanismo de Conv1D y cómo podemos imaginar su mecanismo?
Respuestas:
La convolución es una operación matemática en la que "resume" un tensor o una matriz o un vector en uno más pequeño. Si su matriz de entrada es unidimensional, entonces resume a lo largo de eso en las dimensiones, y si un tensor tiene n dimensiones, entonces podría resumir a lo largo de todas las n dimensiones. Conv1D y Conv2D resumen (convolucionan) a lo largo de una o dos dimensiones.
Por ejemplo, podría convolver un vector en un vector más corto como sigue. Obtenga un vector "largo" A con n elementos y convolucione usando el vector de peso W con elementos m en un vector "corto" (resumen) B con elementos n-m + 1: dondesiyo= ∑j = m - 10 0uni + j∗ wj i = [ 1 , n - m + 1 ]
Entonces, si tiene un vector de longitud n, y su matriz de peso también es longitud n , entonces la convolución producirá un escalar o un vector de longitud 1 igual al valor promedio de todos los valores en la matriz de entrada. Es una especie de convolución degenerada si lo desea. Si la misma matriz de peso es una más corta que la matriz de entrada, obtendrá un promedio móvil en la salida de longitud 2, etc.wyo= 1 / n
Puede hacer lo mismo con el tensor tridimensional (matriz) de la misma manera: dondesii k l= ∑j1= m1- 1j2= m2- 1j3= m4 4- 10 0uni + j1, k + j2, l + j3∗ wj1j2j3 i = [ 1 , n1- m1+ 1 ] , k = [ 1 , n2- m2+ 1 ] , l = [ 1 , n3- m3+ 1 ]
fuente
Esta convolución 1d ahorra costos, funciona de la misma manera pero asume una matriz de 1 dimensión que hace una multiplicación con los elementos. Si desea visualizar, piense en una matriz de filas o columnas, es decir, una sola dimensión cuando multiplicamos, obtenemos una matriz de la misma forma pero de valores más bajos o más altos, por lo tanto, ayuda a maximizar o minimizar la intensidad de los valores.
Esta imagen puede ayudarte
Para obtener más información, consulte https://www.youtube.com/watch?v=qVP574skyuM
fuente
Usaré una perspectiva Pytorch, sin embargo, la lógica sigue siendo la misma.
Al usar Conv1d (), debemos tener en cuenta que lo más probable es que trabajemos con entradas bidimensionales, como secuencias de ADN codificadas en caliente o imágenes en blanco y negro.
La única diferencia entre el Conv2d () más convencional y el Conv1d () es que este último utiliza un núcleo unidimensional como se muestra en la imagen a continuación.
Aquí, la altura de sus datos de entrada se convierte en la "profundidad" (o in_channels), y nuestras filas se convierten en el tamaño del núcleo. Por ejemplo,
Podemos ver que el kernel se extiende automáticamente a la altura de la imagen (al igual que en Conv2d () la profundidad del kernel se extiende automáticamente por los canales de la imagen) y, por lo tanto, todo lo que tenemos que dar es el tamaño del kernel con respecto al lapso de las filas
Solo tenemos que recordar que si asumimos una entrada bidimensional, nuestros filtros se convierten en nuestras columnas y nuestras filas se convierten en el tamaño del núcleo.
fuente
Me gustaría explicar la diferencia visualmente y en detalle (comentarios en código) y en un enfoque muy muy fácil.
Primero revisemos el Conv2D en TensorFlow .
Y el Conv1D es un caso especial de Conv2D como se indica en este párrafo del documento TensorFlow de Conv1D .
Veamos cómo podemos transferir Conv1D también un problema Conv2D. Dado que Conv1D se usa generalmente en escenarios de PNL, podemos ilustrar eso en el siguiente problema de PNL.
Hagámoslo usando Conv1D (también en TensorFlow):
Podemos ver que el 2D en Conv2D significa que cada canal en la entrada y el filtro es bidimensional (como vemos en el ejemplo de gif) y 1D en Conv1D significa que cada canal en la entrada y el filtro es 1 dimensional (como vemos en el gato y perro NLP ejemplo).
fuente