59doit

합성곱(1) 본문

인공지능

합성곱(1)

yul_S2 2023. 1. 17. 09:38
반응형

합성곱연산

 

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
Comments