본문 바로가기

implement_ml_models/CNN

implement_CNN(pooling)

2023.03.07 - [분류 전체보기] - implement_CNN(start)

 

implement_CNN(start)

시각 피질 안의 뉴런들이 작은 국부 수용장을 가진다. 이는 뉴런들이 시야의 일부 버위 안에 있는 시각 자극에만 반응한다는 뜻이다. 각 뉴런들은 동일한 수용장을 가지지만 다른 각도의 선분에

teach-meaning.tistory.com

풀링 연산의 구현

class POOLING:
  pad = PADDING()

  pool_result = []

  def max_pooling(self, input, pooling_size):
    """
    input : 입력 데이터
    pooling_size : pooling size
    """
    
    pooling_matrix = self.pad.padding(input, input.shape[0] % pooling_size)

    for col in range(0, pooling_matrix.shape[0], pooling_size):
      for row in range(0, pooling_matrix.shape[1], pooling_size):
        padding_result = []
        for pooling_col in range(pooling_size):
          for pooling_row in range(pooling_size):
            
            padding_result.append(pooling_matrix[pooling_col + col, pooling_row + row])
        self.pool_result.append(max(padding_result))
    
    # 연산 결과를 크기에 맞게 바꿔준다.
    self.pool_result = np.array(self.pool_result).reshape(int(pooling_matrix.shape[0] / pooling_size), -1)

1 : pooling 사이즈와 입력 데이터간 크기가 맞지 않을 수 있으므로 padding 의 수행

2 : pooling_matrix 에서 pooling_size에 맞게 가장 큰 값을 pool_result 에 넣어준 후 크기에 맞게 바꿔준다.

pool = POOLING()

pool.max_pooling(cnn.cnn_result[0], 2)

pool.pool_result.shape
>>>
(11, 11)

연산 후 크기가 감소한 것을 확인 가능

 

'implement_ml_models > CNN' 카테고리의 다른 글

implement_CNN(수정)  (0) 2023.03.09
implement_CNN(same_padding)  (0) 2023.03.09
implement_CNN(start)  (0) 2023.03.07
implement_CNN(pooling)  (0) 2022.12.06
impelment_CNN(stride)  (0) 2022.12.06