2017. 5. 9. 07:32ㆍmachine learning
2017/05/08 - [machine learning] - [TENSORFLOW] CNN-1
convolution으로 다양한 filter를 적용한 filter map을 생성했다면, 이제는 이 filter map의 계산 부하나 연산 속도 등을 위해 filter map 데이터의 크기를 줄일 필요가 있다.
CNN의 pooling을 통해 filter map의 크기를 줄일 수가 있다. average pooling이나 sparse coding pooling, maxpooling 등의 여러 가지 pooling이 있으며 이번 포스팅에서는 max pooling만 다뤄볼 예정이다.
max pooling은 말 그대로 해당 커널 내에서 가장 큰 값만 취하겠다는 소리다. 예를 들어 [[1,3], [2,4]] 의 값에서 4만 취하겠다는 소리이며, 결과 적으로 4의 데이터를 1로 줄이는 효과를 가지게 된다.
아래의 max-pooling이 추가된 코드를 보자.
tf.nn.max_pool이라는 함수가 추가되었음을 확인해보자. strides는 convolution에서도 설명했듯이 mask의 이동 step을 말한다. ksize는 커널 크기를 의미하는데 ksize [1,2,2,1]의 뜻은 2x2 입력에 대해 출력 결과를 1개만 나타낸다는 뜻이다. 즉 4개 입력이 들어오면 결과로 1개만 나타낸다는 뜻이 된다.
relu를 취한 결과 이미지와 max_pooling을 취한 결과 이미지를 비교해보자.
왼쪽 이미지가 relu를 씌운 이미지이고 오른쪽이 max-pooling을 진행한 이미지이다. 오른쪽 이미지가 다소 누그러진 모양이지만 그럼에도 이미지의 외형을 유지하고 있음을 확인할 수 있다. 이런식으로 max-pooling을 통해 데이터를 축소시킴으로써 보다 효율적으로 이미지 처리 및 분류가 가능하게 된다.