말랑코딩
7-5. 풀링 계층 구현하기 본문
풀링 계층 구현하기
- 위 그림에서는 2x2 풀링 영역을 예로 듦.
위 그림에서,
-입력데이터(3,4,4)를 2x2의 풀링영역으로 전개 -> (4,12)
-전개된 데이터의 각 행에서 최대값 추출 -> (1,12)
-기존 채널에 맞게 reshape -> (3,4)
풀링 계층 파이썬(python) 구현
class Pooling:
def __init__(self, pool_h, pool_w, stride=1, pad=0):
self.pool_h = pool_h
self.pool_w = pool_w
self.stride = self.stride
self.pad = pad
def forward(self, x):
N, C, H, W = x.shape
out_h = int(1 + (H - self.pool_h) / self.stride)
out_w = int(1 + (H - self.pool_w) / self.stride)
# 전개 (1)
col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)
col = col.reshape(-1, self.pool_h*self.pool_w)
# 최댓값 (2)
out = np.max(col, axis=1) # axis=0 : 열, axis=1 : 행
# 성형 (3)
out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)
return out
- 입력데이터를 전개
- 행별 최댓값 구함
- 적절한 모양으로 성형(reshape)
요약
- 풀링 계층은 입력데이터를 풀링영역으로 전개하고, 전개된 각 행에서 최대값을 추출하고, 이를 채널에 맞게 reshape 하는 과정임.
*복습 차원에서 다시
풀링 계층 : 완전연결 계층(affine)으로 이루어진 네트워크가 아닌, CNN으로 이루어진 네트워크에서는 앞쪽 단에서
affine-ReLU 대신 Conv-ReLU-(Pooling) 으로 이루어져있는데 이를 구성하는 계층 중 하나.
'딥러닝' 카테고리의 다른 글
앵커 박스(Anchor box) (0) | 2022.02.10 |
---|---|
docker 에서 yolox 데모 실행해보기(ubuntu 18.04) (0) | 2022.02.09 |
7-4. 합성곱 계층 구현하기 (0) | 2022.01.05 |
7-3. 풀링 계층(Pooling layer) (0) | 2022.01.05 |
7-2. 합성곱 계층(convolutional layer) (0) | 2022.01.05 |
Comments