1. 입력 데이터를 전개한다.
2. 행별 최댓값을 구한다.
3. 적절한 모양으로 성형한다.


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 + (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)
        
        #성형(3)
        out = out.reshape(N, out_h, out_w, C),transpose(0,3,1,2)
        
        return out
'머신 러닝 및 파이썬 > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
| Ch.7 합성곱 신경망(CNN)/ 7.4 합성곱 계층 구현하기 (0) | 2020.03.14 | 
|---|---|
| Ch.7 합성곱 신경망(CNN)/ 7.2 합성곱 계층 (0) | 2020.03.12 | 
| Ch.6 학습 관련 기술들/ 6.5 적절한 하이퍼파라미터 값 찾기 (0) | 2020.03.12 | 
| Ch.6 학습 관련 기술들/ 6.4.3 드롭아웃 (0) | 2020.03.11 | 
| Ch.6 학습 관련 기술들/ 6.4.1 오버피팅 (0) | 2020.03.11 |