[딥러닝] CNN - Conv2D Layer

박병현·2022년 1월 23일
0

CNN(Convolution Neural Network)


[참고 링크] : https://towardsdatascience.com/conv2d-to-finally-understand-what-happens-in-the-forward-pass-1bbaafb0b148

※ 본 내용은 개인적인 공부기록장으로, 틀린내용이 있을 수 있습니다.


[CNN의 주요 특성]

  • CNN은 컴퓨터 비젼 분야 주로 활용 (그외에 음성, NLP 등등)
  • 특징 추출(Feature Extraction)에 뛰어난 성능을 나타
  • 컨볼루션 레이어(Convolution Layer) + 풀링 레이어(Pooling Layer)를 반복하여 구성
  • CNN의 주요한 성질 중 하나는 특징표현 학습(Feature Representation Learning)이다.
  • 특징 추출 기법인 컨볼루션(Convolution, 합성곱) 연산을 사용하여 이미지의 픽셀을 주변의 픽셀의 조합으로 대체하는 방식입니다.

CNN의 핵심인 (1)컨볼루션 레이어, (2)Pooling에 대해 간단히 알아보겠습니다.

(1) 컨볼루션 레이어 : Conv2D

CS231 강의에서 주로 활용되는 gif 예시를 통해 Conv2D 레이어를 구현해보자.

"""이미지의 Convolution Layer 구성

Args:
	filters(int):
    	  * 가중치를 담고있는 kernel 개수랑 동일한 의미를 갖는다.
          * 위 그림에서는 (W0, W1) 두개의 필터를 갖고 있는것을 확인할 수 있다.
          ※ 해당 값은 Output 특징맵의 Channel값이 된다.
        
        kernel_size(tuple):
          * filter(kernel)의 size
          * (height, widhth)
          
        padding(str):
          * 합성곱 연산을 수행하기 전, 입력데이터 주변을 특정값으로 채워 늘리는 것
          * 입력값으로 0 | 'valid' | 'same' 값을 선택할 수 있다.
          
        input_shape(tuple):
          * conv2d Layer에 입력되는 이미지의 크기
          * (height, width, channel|depth) 로, 3개의 원소로 구성
          * channel|depth는 컬러이미지(R,G,B)의 경우 3, 흑백이미지의 경우 1값을 갖음
          
        stride(int|tuple):
          * 입력데이터에 필터를 적용(합성곱연산)할 때 이동할 간격을 조절
          * stirde 높을수록, output특징맵의 차원수가 작아짐 
"""

# Conv2D Layer층 구성
keras.layers.Conv2D(
	filters=2,
    	kernel_size=(3, 3),
        padding=0,
        input_shape=(7, 7, 3),
        stride=(2,2))

위에서 구현한 Conv2D Layer 정리

  • 3x3 사이즈의 2개의 kernel(filter)를 거쳐 이미지의 특징맵output을 추출한다.
  • 이 때, 2개의 kernel(filter)를 거치기 때문에, output 특징맵은 2개의 Channel을 갖는다.

Conv2D Layer 의 Kerner(filter)에 대한 부연설명

  • Kernel은 Filter와 동일한 의미를 갖는다. 또한 가중치값을 의미하기도 한다.
  • 활성함수의 경우, relu 또는 tanh를 주로 사용한다.
  • 각 kernel(filter)의 가중치의 초기값은 keras 초기값 Default로 설정된 glorot_uniform로 초기화된다.
  • 학습을 진행해가며, 해당 층의 2개의 kernel의 가중치는 epoch마다 업데이트 될 것이다.
profile
AI Developer

0개의 댓글