티스토리 뷰
3. Convolutional Networks / L2. Convolutional Neural Networks - Pooling Layers
chrisysl 2018. 9. 11. 11:11Pooling 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=(100, 100, 15))) model.summary() | cs |
- Max pooling layer의 차원을 확인해보기 위해 위 코드를 입력.
>>
- 결과