8-1 컨볼루션 연산
– 컨볼루션 이해
– 회선 구현
1. NumPy 배열을 정의하고 배열을 선택한 다음 뒤집습니다.
import numpy as np
w = np.array((2, 1, 5, 3))
x = np.array((2, 8, 3, 7, 1, 2, 0, 4, 5))
w_r = np.flip(w)
print(w_r)
##출력: (3 5 1 2)
2. NumPy에서 내적을 사용하여 컨벌루션 수행
for i in range(6):
print(np.dot(x(i:i+4), w_r))
##출력:
63
48
49
28
21
20
3. SciPy로 컨볼루션 수행
from scipy.signal import convolve
convolve(x, w, mode="valid")
##출력: array((63, 48, 49, 28, 21, 20))
– 교차 상관
대부분의 딥 러닝 패키지는 교차 상관을 사용하여 컨벌루션 신경망을 생성합니다.
교차 상관은 컨볼루션과 같은 방식으로 작동하지만 “슬라이딩 배열을 뒤집지 않습니다”.
from scipy.signal import correlate
correlate(x, w, mode="valid")
##출력: array((48, 57, 24, 25, 16, 39))
– 컨벌루션 신경망에서 상호 상관을 사용하는 이유는 무엇입니까?
모든 모델은 훈련 전에 가중치 배열의 요소를 무작위로 초기화하므로 가중치의 “슬라이딩 배열”이 뒤집혀 있는지 여부는 중요하지 않습니다.
– 패딩 및 가랑이
패딩: 원래 배열의 양쪽 끝에 빈 요소 추가 -> 대부분의 Convolutional Neural Network에서 동일한 패딩을 사용합니다.
Stride: 슬라이딩 배열의 간격 조정
– 유효한 실내 장식품
원래 배열의 요소가 컨볼루션 연산에 참여하는 정도는 다양합니다.
mode 매개변수에 대한 ‘valid’ 지정
유효한 패딩이 있는 결과 배열은 항상 원래 배열보다 작습니다.
– 풀패딩
원래 배열의 모든 요소가 연산에 동등하게 참여하는 패딩 방법
제로 패딩은 원래 배열의 두 문자열에 가상 요소를 추가하는 데 필요합니다.
correlate(x, w, mode="full")
##출력: array(( 6, 34, 51, 48, 57, 24, 25, 16, 39, 29, 13, 10))
– 같은 실내 장식품
출력 배열의 길이를 원래 배열의 길이와 동일하게 만듭니다.
출력 배열의 길이가 원래 배열의 길이와 같도록 원래 배열에 0을 추가합니다.
correlate(x, w, mode="same")
##출력: array((34, 51, 48, 57, 24, 25, 16, 39, 29))
– 단계
슬라이딩 어셈블리의 간격
슬라이딩 간격 조정
컨벌루션 신경망을 만들 때 일반적으로 단계 크기를 1로 지정합니다.
※ 내용