이번 포스팅에서는 numpy의 pad함수에 대해서 포스팅하겠습니다.
딮러닝에서 ConvNet을 구현할 때, Padding이라는 것을 주로 사용합니다.
Convolution시 입력 데이터를 그냥 넣게 되면, 출력값의 차원이 작아지게 되는데, 이를 방지하기 위해서 Padding을 주로 사용합니다.
Padding은 다음 포스트에 설명되어있으니 해당 포스팅을 참조하시면 됩니다.
[CNN] Convolution Neural Network
이러한 Padding을 Numpy를 통해서 구현할 수 있습니다.
일반적으로 이미지는 다음과 같은 Numpy array를 통해서 표현할 수 있습니다.
import numpy as np import matplotlib.pyplot as plt img = np.array([[1,2,3,4,5],[6,7,8,9,10]]) plt.imshow(img, cmap='gray') plt.show()
이러한 이미지에 padding size 2, zero padding으로 padding을 해보겠습니다.
코드는 아래와 같습니다.
import numpy as np import matplotlib.pyplot as plt img = np.array([[1,2,3,4,5],[6,7,8,9,10]]) padding = 2 npad = ((2,2),(2,2)) img_padding = np.pad(img, npad, 'constant', constant_values=(0)) plt.imshow(img_padding, cmap='gray') plt.show()
사진을 보시면 padding size 2, zero padding으로 들어간것을 확인할 수 있습니다.
그렇다면 npad값은 무엇을 의미하는지 값을 변경해가면서 확인해보겠습니다.
npad값 ((2,0),(2,0))로 해보겠습니다.
왼쪽과 상단부분만 padding이 추가된 것을 확인 할 수 있습니다.
그렇다면 npad를 ((2,0), (0,0))으로 해보겠습니다.
결과를 보면 알 수 있듯이 상단부만 패딩이 된것을 확인할 수 있습니다.
따라서 npad의 첫번째 튜플의 인덱스 0은 첫번째 축을 기준으로 앞단에 붙이는 padding의 갯수를 의미하고,
인덱스 1은 뒷단에 붙이는 padding의 갯수를 의미합니다.
마찬가지로 두번째 튜플의 인덱스 0은 두번째 축을 기준으로 앞단에 붙이는 padding의 갯수를,
인덱스 1은 두번째 축을 기준으로 뒷단에 붙이는 padding의 갯수를 의미합니다.
이를 numpy 공식 문서에서 확인하면 다음과 같이 써져있는 것을 확인할 수 있습니다.
pad_width : {sequence, array_like, int}
Number of values padded to the edges of each axis. ((before_1, after_1), ... (before_N, after_N)) unique pad widths for each axis. ((before, after),) yields same before and after pad for each axis. (pad,) or int is a shortcut for before = after = pad width for all axes.
'IT > Python' 카테고리의 다른 글
[MSCOCO API / Python] Install MSCOCO api (0) | 2017.12.10 |
---|---|
[ubuntu / python 2.7] graph-tool 설치 (0) | 2017.11.15 |
[virtualenv/Uubuntu16.04] Python3 Virtualenv 설치 (0) | 2017.10.24 |
[Ubuntu16.04] Install Pycharm Community / 파이참 커뮤니티 설치 (0) | 2017.10.24 |
[Python GUI Programming :: Tkinter] Hello, Again (0) | 2017.10.12 |