59doit
합성곱(1) 본문
합성곱연산
ex)
import numpy as np w = np.array([2,1,5,3]) x = np.array([2,8,3,7,1,2,0,4,5]) |
# 1. flip 함수 사용 : 뒤집기
w_r = np.flip(w) #[3512] w_r = w[::-1] #[3512] |
# 2..dot : 점곱으로 합성곱 수행
for i in range(6): print(np.dot(x[i:i+4], w_r)) |
63 48 49 28 21 20 |
# 3. scipy
# 3-1) convolve : scipy 합성곱을 위한 convolve 제공
from scipy.signal import convolve convolve(w,x,mode='valid') # valid padding 적용 |
# array([63, 48, 49, 28, 21, 20]) |
▶ valid padding은 원본배열에 패딩을 추가하지 않고
미끄러지는 배열이 언본 배열 끝으로 갈때까지 교차 상관을 수행
-> 배열의 크기는 원본배열보다 항상 작다
-> 양끝의 원소의 연산 참여가 작으므로
# 3-2) correlate : scipy 교차상관
from scipy.signal import correlate correlate(w,x,mode='valid') |
# array([39, 16, 25, 24, 57, 48]) |
▶ 배열을 뒤집지 않는다
모델을 훈련할 때 가중치를 무작위로 초기화하기 때문에 뒤집지 않고 적용해도 상관이 없다
# 4. 패딩
패딩(padding)은 이름에서 원본 배열의 양 끝에 빈 원소를 추가하는 것
# 4-1) valid padding
from scipy.signal import convolve convolve(w,x,mode='valid') # valid padding 적용 |
# array([63, 48, 49, 28, 21, 20]) |
▶ valid padding은 원본배열에 패딩을 추가하지 않고
미끄러지는 배열이 언본 배열 끝으로 갈때까지 교차 상관을 수행
-> 배열의 크기는 원본배열보다 항상 작다
-> 양끝의 원소의 연산 참여가 작으므로
# 4-2) full padding
from scipy.signal import correlate correlate(w,x,mode='full') |
# array([10, 13, 29, 39, 16, 25, 24, 57, 48, 51, 34, 6]) |
▶원본배열에 동일하게 참여하려면 풀 패딩을 진행
# 4-3) same padding
from scipy.signal import correlate correlate(w,x,mode='same') |
# array([16, 25, 24, 57]) |
▶출력 배열의 길이를 원본 배열의 길이와 동일하게
원본배열에 제로패딩을 추가 하면 된다
* 제로패딩 : 원본 배열의 원소가 연산에 동일하게 참여 하려면
원본배열의 양끝에 가상의 원소를 추가해야 하는데
이때의 가상의 원소로 0을 사용하기 때문에 제로패딩이라고 부른다
-> 합성곱 신경망에서는 대부분 세임패딩 사용
# 5. 스트라이드
▶스트라이드(stride)는 미끄러지는 배열의 간격을 조절하는 것
미끄러지는 방향은 그래도 유지, 미끄러지는 간격의 크기만 커진다.
합성곱 신경망에서는 보통 stride를 1로 지정하여 연산 한다
2차원 배열의 합성곱
원본배열 : x
미끄러지는배열 : w
# 1. correlate2d 사용
x = np.array ([[1,2,3], [4,5,6], [7,8,9]]) w = np.array([[2,0],[0,0]]) |
from scipy.signal import correlate2d correlate2d(x,w,mode = 'valid') |
# array([[ 2, 4], # [ 8, 10]]) |
correlate2d(x,w,mode = 'same') |
# array([[ 2, 4, 6], # [ 8, 10, 12], # [14, 16, 18]]) |
'인공지능' 카테고리의 다른 글
합성곱(3) (2) | 2023.01.18 |
---|---|
합성곱(2) (4) | 2023.01.17 |
다중분류 신경망(3) (8) | 2023.01.13 |
다중분류 신경망(2) (0) | 2023.01.12 |
다중분류 신경망(1) (0) | 2023.01.12 |