티스토리 뷰

Pooling Layers

- CNN을 구성하는데 필요한 중간, 최종 레이어에 대해 알아보자.


- Pooling layer 라 부르는 이 레이어는 주로 콘볼루션 레이어를 input으로 받아들인다.

- 콘볼루션 레이어는 각 필터당 하나의 feature map이 형성되고, 그 feature map을 스택처럼 쌓아둔 것이다.

- 많은 object 카테고리가 존재하는 복잡한 데이터셋을 가지고 CNN을 구현해 내는경우 

- 매우 많은 수의 필터를 필요로 하는데, 각각은 이미지의 패턴을 찾아내는데에 사용된다.




- 필터가 많다는 얘기는 그만큼 feature map들이 쌓이게 된다는것이고 이것은

- 우리가 구현할 CNN의 차원이 매우 크다는 얘기이기도 하다.

- 고차원(Higher dimensionality)을 구현하려면 그에 상응하는 더 많은수의 파라미터들을 필요로 하고,

- 그렇게 되면 over-fitting을 초래할 수 있다.

- 따라서 차원을 감소시킬 방법을 필요로한다.

- 이런 역할을 CNN에서 해 주는 레이어가 pooling layer다.




- pooling layer에는 두가지 타입이 있다.

- 첫째로 Max pooling layer 인데, max pooling layer는 feature map들이 쌓여있는 스택을 input으로 받는다.

- 이전 콘볼루션 레이어에서와 마찬가지로 max pooling layer 또한 window size와 stride를 필요로 한다.

- 위 경우에선 window size : 2 by 2 / stride : 2 가 되고, 좌측 상단부터 window를 시작한다.

- max pooling layer에서 뽑아내는 노드의 값은 window상에서 포함하고있는 픽셀들 중 최대값을 뽑아낸다.

- 맨 첫번째 window상의 최대값은 9 가 된다.




- max pooling layer의 output은 feature map의 개수와 동일한 개수의 컬렉션을 리턴하는데,

- 당연히 그 리턴된 output의 feature map은 이전 input보다 너비와 높이가 감소된다.

- 위 경우에선 높이와 너비가 이전보다 반으로 줄게 되었다.




- 둘째로 Global average pooling layer이다.

- global average pooling layer는 window size나 stride를 지정해주지 않는다.

- 이 pooling layer는 더 급격한 방식으로 CNN의 차원을 줄이는데, 

- 각 feature map 상의 노드값들의 평균을 뽑아낸다.

- 첫번째 파랑 feature map의 총합은 80이 되고, 노드 전체 개수인 16으로 나눠주면 평균은 5가 된다.




- 따라서 global average pooling layer의 최종 output은 single value로 크기가 감소된 feature map이 된다.

- 이런 방식으로 global average pooling layer는 3D array를 input으로 하여 벡터를 리턴한다.

- 위에선 세가지 엔트리를 갖고있는 벡터가 이 pooling layer의 output이 된다.






- 팬케익에 비유해서 pooling layer를 요약해보면, 두 pooling layer 모두 input의 차원을 줄여준다.

- Max pooling layer의 경우 적절하게(지정해준 window와 stride의 값에 상당한) 차원을 줄여준다.

- Global pooling layer의 경우 output의 차원을 single value로 급격하게 줄여준다.

- 그 외 다른 pooling layer에 대한 설명은 여기






Max Pooling Layers in Keras

- Keras에서 max pooling layer를 생성하려면 아래와 같은 모듈을 임포트 해야한다.

- 다음으로 아래의 포멧을 이용하여 convolutional layer를 생성할 수 있다.




Arguments

- 아래의 인자는 반드시 포함해야한다.

- pool_size : pooling window의 너비와 높이(height and width) 지정

- 아래의 인자는 옵셔널하다. (세부조정 가능)

- strides : 수직, 수평 stride 값. 디폴트 값은 pool_size 값이 됨.

- padding : 'valid' 또는 'same' 을 지정. 디폴트 값은 'valid'가 됨.

- pool_size 와 strides 는 숫자 또는 튜플로 값을 줄 수 있다.

- pooling layer에 대한 자세한 내용은 여기






Example

- CNN을 설계하는데 max pooling layer를 통하여 convolutional layer의 차원을 감소시키고 싶다.

- convolutional layer의 크기는 (100, 100, 15) 이고, max pooling layer의 크기는 (50, 50, 15)이다.

- 2 by 2 window를 사용할 것이고, stride는 2이다. 아래처럼 사용하면 됨.




Checking the Dimensionality of Max Pooling Layers

1
2
3
4
5
6
from keras.models import Sequential
from keras.layers import MaxPooling2D
 
model = Sequential()
model.add(MaxPooling2D(pool_size=2, strides=2, input_shape=(10010015)))
model.summary()
cs

- Max pooling layer의 차원을 확인해보기 위해 위 코드를 입력.




>>

- 결과

댓글
  • 프로필사진 광영 헷갈렸는데, 잘 봤습니다. 감사합니다. 2019.07.08 17:01
  • 프로필사진 익명 비밀댓글입니다 2019.12.17 18:17
  • 프로필사진 GyeongHo Kim 감사합니다! 2020.12.31 00:46 신고
  • 프로필사진 Whi$key 안녕하세요 딥러닝을 공부하고 있던와중 제가 모르는 부분을 너무나 콕 집어알려주셔서, 덕분에 이해할 수 있게 되었습니다. 다름이 아니라 이 내용을 제 개인블로그에 적어도 될까요? 당연히 출처는 적을 것이며, 내용은 제가 이해했던 식으로 조금 수정하여 적을 것 입니다!. 혹시 싫으시다면 바로 삭제하겠습니다! 오늘도 기분좋은 하루되시기 바라며 덕분에 개발자로서 한걸음 성장하였습니다. 감사드립니다. 2021.09.08 00:03 신고
댓글쓰기 폼
공지사항
Total
290,633
Today
25
Yesterday
32
링크
TAG
more
«   2022/08   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
글 보관함