Qual é a diferença entre Conv1D e Conv2D?


18

Eu estava examinando os documentos de convolução do keras e encontrei dois tipos de convulsão Conv1D e Conv2D. Eu fiz algumas pesquisas na web e é isso que eu entendo sobre Conv1D e Conv2D; Conv1D é usado para seqüências e Conv2D usa para imagens.

Eu sempre pensei que as redes neruais de convolução eram usadas apenas para imagens e visualizavam a CNN dessa maneira

insira a descrição da imagem aqui

Uma imagem é considerada como uma matriz grande e, em seguida, um filtro desliza sobre essa matriz e calcula o produto escalar. Acredito nisso o que keras menciona como um Conv2D. Se o Conv2D funciona dessa maneira, qual é o mecanismo do Conv1D e como podemos imaginar seu mecanismo?


2
Dê uma olhada nesta resposta . Espero que isto ajude.
learner101

Respostas:


4

Convolução é uma operação matemática em que você "resume" um tensor, uma matriz ou um vetor em um menor. Se sua matriz de entrada é unidimensional, você resume em dimensões, e se um tensor possui n dimensões, você pode resumir em todas as n dimensões. Conv1D e Conv2D resumem (convoluem) ao longo de uma ou duas dimensões.

bi=j=m10ai+jwj
i=[1,nm+1]

wi=1/n

[a:uma1uma2uma3W:1/21/2W:1/21/2]=[b:uma1+uma22uma2+uma32]

bEukeu=j1=m1-1j2=m2-1j3=m4-10 0umaEu+j1,k+j2,eu+j3Wj1j2j3
Eu=[1,n1-m1+1],k=[1,n2-m2+1],eu=[1,n3-m3+1]


3

Essa convolução em 1d economiza custos, funciona da mesma maneira, mas assume uma matriz de 1 dimensão que faz uma multiplicação com os elementos. Se você deseja visualizar, pense em uma matriz de linha ou coluna, ou seja, uma única dimensão, quando multiplicamos, obtemos uma matriz da mesma forma, mas com valores mais baixos ou mais altos, ajudando a maximizar ou minimizar a intensidade dos valores.

Essa imagem pode ajudá-lo, insira a descrição da imagem aqui

Para obter detalhes, consulte https://www.youtube.com/watch?v=qVP574skyuM


1

Eu vou usar uma perspectiva de Pytorch, no entanto, a lógica permanece a mesma.

Ao usar Conv1d (), devemos ter em mente que provavelmente trabalharemos com entradas bidimensionais, como seqüências de DNA com codificação de um hot-hot ou imagens em preto e branco.

A única diferença entre os Conv2d () e Conv1d () mais convencionais é que este último usa um núcleo unidimensional, como mostra a figura abaixo.

Exemplo de Conv1d () encontrado em /programming/48859378/how-to-give-the-1d-input-to-convolutional-neural-networkcnn-using-keras/52508449

Aqui, a altura dos dados de entrada se torna a "profundidade" (ou in_channels), e nossas linhas se tornam o tamanho do kernel. Por exemplo,

import torch
import torch.nn as nn

tensor = torch.randn(1,100,4)
output = nn.Conv1d(in_channels =100,out_channels=1,kernel_size=1,stride=1)(tensor)
#output.shape == [1,1,4]

Podemos ver que o kernel se estende automaticamente até a altura da imagem (assim como em Conv2d () a profundidade do kernel se estende automaticamente pelos canais da imagem) e, portanto, tudo o que resta é o tamanho do kernel em relação ao período de as linhas.

Só precisamos lembrar que, se estamos assumindo uma entrada bidimensional, nossos filtros se tornam nossas colunas e nossas linhas se tornam o tamanho do kernel.


A imagem foi tirada desta pergunta anterior: stackoverflow.com/questions/48859378/…
Erick Platero
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.