본문 바로가기

implement_ml_models

implement_padding

2022.11.22 - [implement_ml_models] - implement_cnn

 

implement_cnn

합성곱 연산을 사용하는 신경망 row = [] matrix = [] for matrix_row in range(input.shape[0]-w.shape[0]+1): for matrix_col in range(input.shape[1]-w.shape[1]+1): matrix = [] for w_row in range(w.shape[0]): row = [] for w_col in range(w.shape[0]):

teach-meaning.tistory.com

패딩

패딩을 통해 입력 데이터 주변을 특정값으로 채울 수 있다.

입력의 커널에 대한 합성곱 연산 후 입력과 동일한 크기의 결과를 만들기 위한 패딩의 경우 

padding_matrix.shape[0]-w.shape[0]+1 = input.shape[0]

위 연산 결과를 가져야 하며, 이항하여 padding_matrix 크기를 계산할 수 있다.

padding_matrix.shape[0] = input.shape[0] + w.shape[0] - 1

이 때, 패딩 값이 입력값 전체를 감싸는 것이 아닌, 가중치 커널, 입력의 크기에 따라 일부만을 감싸는데, 입력의 패딩 위치를 결정해야 한다. (상하좌우)

padding_matrix = np.zeros((input.shape[0]+w.shape[0]-1, input.shape[1]+w.shape[1]-1))
padding_matrix
>>>
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
       
input
>>>
array([[0.8383069 , 0.05095063, 0.62240076, 0.99743712],
       [0.7950964 , 0.36897637, 0.79920073, 0.7719454 ],
       [0.25481215, 0.75443591, 0.31732551, 0.48430807],
       [0.54374886, 0.04103307, 0.72146801, 0.45896012]])

 

 

패딩 행렬을 생성 후 여기에 입력 값을 넣는 방식,

패딩 행렬에서의 입력값의 시작 위치를 결정하는 것이 패딩된 값의 위치를 결정하는 것,

입력값의 패딩 행렬에서의 시작 위치는 다음과 같이 정해진다.

(0 ~ padding_matrix.shape[0]-input.shape[0], 0 ~ padding_matrix.shape[1]-input.shape[1])
해당 값 사이에서 입력값이 시작할 수 있다. 
for i in range(input.shape[0]):
  for j in range(input.shape[1]):
    padding_matrix[i+1][j+1] = input[i][j]

i, j 에 더하는 값의 변형을 통해 시작 위치를 정할 수 있다. 먼저 임의의 값 1로 지정했다.

padding_matrix
>>>
array([[0.        , 0.        , 0.        , 0.        , 0.        ],
       [0.        , 0.8383069 , 0.05095063, 0.62240076, 0.99743712],
       [0.        , 0.7950964 , 0.36897637, 0.79920073, 0.7719454 ],
       [0.        , 0.25481215, 0.75443591, 0.31732551, 0.48430807],
       [0.        , 0.54374886, 0.04103307, 0.72146801, 0.45896012]])

연산 후 패딩이 좌상단에 위치한 것을 확인할 수 있다.

 

'implement_ml_models' 카테고리의 다른 글

implement_pooling  (0) 2022.11.22
implement_stride  (0) 2022.11.22
implement_cnn  (0) 2022.11.22
implement_activation  (0) 2022.11.21
implement_multiLayerPerceptron  (0) 2022.11.21