본문 바로가기

AI/PyTorch

[PyTorch] Conv1d, Conv2d 차이점

 Convolution(합성곱)의 연산의 일부로 tensorflow에서는 Conv1D, Conv2D, Conv3D가 사용된다. 그리고 Conv1D, Conv2D, Conv3D 이렇게 나눠지는 기준은 바로 합성곱이 진행되는 방향과 합성곱의 결과로 나오는 출력값이다. 

  합성곱의 방향 출력값
Conv1D 한 방향(가로) 1-D Array(vector)
Conv2D 두 방향(가로, 세로) 2-D Array(matrix)
Conv3D 세 방향(가로, 세로, 높이) 3-D Array(tensor)

사실 위 표의 출력값은 합성공의 출력 값과 동일하지 않다. 왜냐하면 배치 크기와 합성곱이 적용되는 필터의 개수를 고려하면 다르게 표현 될 것이다. 위의 경우는 배치를 고려하지 않고 합성곱 필터를 하나만 적용했을 떄라고 생각하면 된다.

 

 

 

 

[tensorflow] 자연어처리(NLP) 1. 기초다지기(layers)

0. 들어가면서  자연어처리, 즉 글자를 컴퓨터가 이해할 수 있게 만드는 것이다. CNN과 RNN의 차이도 모르고, 단 한번도 구현해 본 적이 없다면, 이곳은 오아시스 같은 해결책을 줄 수 있을 것이다.

han-py.tistory.com

 

가장 크게 다른점은 input 인데

일단 Conv1d는 텐서가 3이상인 input이 필요하고, Conv2d는 텐서가 4이상인 input을 다룬다.

 

 

근데 사실 더 직관적으로 볼 수 있는 것은 바로 input shape이다

 

채널과 배치사이즈를 혼동하기 쉽다

채널은 엄연하게 하나의 데이터(?)덩어리에 포함된 것이다.

데이터 하나를 이미지라고 하면 흑백이미지의 경우 채널이 1개이고, 

컬러 이미지의 경우 RGB 3겹이 필요하므로 하나의 이미지당 채널이 3개가 되는 것 이지 

빨간 이미지(R)  ,초록이미지(G), 파란이미지(B) 3개가 각각 다른 데이터 인 것은 아닌 것과 같다 

이렇게 conv 1d와 conv2d는 데이터의 형식이 다르다.

 

위의 keras예제는 서로 다른 3개의 데이터가 각각 64열을 가지며, 이를 하나의 데이터 덩어리로 생각하여 학습시킨다.

conv2d와 conv1d의 형식을 모두 사용할 수 있는데, 둘을 비교하면 다음과 같다.

채널을 1개로하고 3개를 이어붙여 h=3인, conv2d로 사용할 것인지

채널을3개로 하고 conv1d를 사용할 것인지(conv1d 는 h가 없으므로 채널을 늘려서 하나의 데이터로만듬)

 

 

 

conv2d에서 filter와 input/ output전부의 h=1이라고 생각하면될 것 같다.

기본적으로 conv1d가 계산을 적게 수행하므로 시간이 더 적게 소요된다.

 

그림을 설명하면 다음과 같다.

다음 형광팬(?) 을 같은색으로 칠한 것 끼리 같은 크기를 가진다.

일단 batch_size는 데이터의 갯수와 비슷한 개념이므로 input과 output이 동일하다

 

 

h, w는 padding에 따라 달라지는데, 

원래대로라면 (padding="valid") 입력한 kernel size크기의 필터를 stride의 크기만큼 이동시키며, 나온 값이 맞지만

편의를 위하여 zero padding등을 사용해 output과 input의 h,w를 동일하게 맞추어주는 것이 대부분이다. 

padding = "same"을 이용하면 제로패딩을 이용하여 h,w를 동일하게 맞추어준다. 

=> 이 부분에 대해서 자세한 내용은 아래 링크를 참조

2020/08/02 - [ML] - [딥러닝의 정석] 05. 합성곱 신경망-1

 

filter의 kernel size는 당연히 input데이터의 크기보다 커질수 없으며,

filter는 kernel_size(filter의 h,w), filter의 수, filter의 채널로 구성되는 데,

이때, filter의 channel(depth)는 input데이터의 channel과 같아야 한다. (그래야 하나의 필터에 대해 depth = 1의 값이 나오므로)

이렇게 하나의 필터를 한번 데이터에 돌리면 1개의 depth가 생성되고 이를 필터 갯수만큼 반복하므로

output data의 channel은 필터의 수와 동일해진다 

 

 

 

[keras] CNN분류 모델 만들기 4 - 기본 구조 잡기

데이터의 마지막 전처리 밑 기본 구조는 아래의 사이트를 활용했다 www.kaggle.com/alexanderlazarev/simple-keras-1d-cnn-features-split/notebook Simple Keras 1D CNN + features split Explore and run machin..

iagreebut.tistory.com