반응형
사이토고키의 <밑바닥부터 시작하는 딥러닝>을 공부하고 정리해보았습니다.
이전에는 합성곱 계층을 구현하는 방법에 대해 알아보았습니다.
이번에는 풀링 계층을 구현하는 방법에 대해 알아보겠습니다.
풀링 계층 구현하기
풀링 계층 구현도 합성곱 계층과 마찬가지로 im2col을 사용해 입력 데이터를 전개합니다.
단, 풀링의 경우엔 채널 쪽이 독립적이라는 점이 합성곱 계층 때와 다릅니다.
구체적으로는 아래 그림과 같이 풀링 적용 영역을 채널마다 독립적으로 계산합니다.
일단 이렇게 전개한 후, 전개한 행렬에서 행별 최댓값을 구하고 적절한 형상으로 성형하기만 하면 됩니다.
이상이 풀링 계층의 forward 처리 흐름입니다.
이를 파이썬으로 구현해보겠습니다.
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 = 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 + (W - 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)
# 성형 (3)
out = out.reshape(N, out_h, out_w, C).transpose(0, 3, 1, 2)
return out
풀링 계층 구현은 아래와 같이 세 단계로 진행합니다.
1. 입력 데이터를 전개한다.
2. 행별 최댓값을 구한다.
3. 적절한 모양으로 성형한다.
반응형
'수학 > 딥러닝 이론' 카테고리의 다른 글
[딥러닝] 합성곱 신경망(CNN) - CNN 시각화 하기 (2) | 2020.10.05 |
---|---|
[딥러닝] 합성곱 신경망(CNN) - CNN 구현하기 (0) | 2020.10.05 |
[딥러닝] 합성곱 신경망(CNN) - 합성곱 계층 구현하기 (0) | 2020.10.05 |
[딥러닝] 합성곱신경망(CNN) - im2col로 데이터 전개하기 (1) | 2020.10.05 |
[딥러닝] 합성곱 신경망(CNN) - 배치 처리와 풀링 계층 (0) | 2020.10.04 |