59doit
합성곱(2) 본문
반응형
텐서플로를 이용한 합성곱
텐서플로의 2차원 합성곱 함수 : conv2d
4차원배열을 입력으로한다-> 입력 이미지의 높이와 너비 외에 더 많은 차원이 필요함
# 2차원 배열을 4차원 배열로 바꾸어 합성곱 수행
import tensorflow as tf x_4d = x.astype(np.float).reshape(1,3,3,1) w_4d = w.reshape(2,2,1,1) |
▶ reshape : 2차원배열 -> 4차원배열
astype : 자료형을 실수로 바꾸기
배열
(배치,샘플높이,샘플너비,채널)
가중치(필터의경우)
(입력의배치, 입력의높이, 입력의너비, 가중치의개수)
* 합성곱에서는 일반적으로 입력과 가중치의 채널 개수가 동일하다
즉, 채널방향으로는 가중치가 이동하지 않는다
c_out = tf.nn.conv2d(x_4d, w_4d, strides=1, padding='SAME') # 배치 차원과 컬러차원 제거하고 3,3크기로 변환 c_out.numpy().reshape(3, 3) |
# array([[ 2., 4., 6.], # [ 8., 10., 12.], # [14., 16., 18.]]) |
▶ conv2d 함수의 패딩 옵션은 대문자사용
결과값으로 tensor객체(다차원배열)를 반환
텐서에 numpy사용하면 넘파이배열로 변환가능
폴링연산
#
x = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]) x = x.reshape(1, 4, 4, 1) |
▶ 4*4 크기 배열 만들고 1*4*4*1 크기 배열로 변환
#
p_out = tf.nn.max_pool2d(x,ksize=2,strides=2,padding='VALID') p_out.numpy().reshape(2,2) |
▶ max_pool2d()함수로 최대 풀링 수행
풀링 크기 : ksize매개변수에
스트라이드 크기 : strides매개변수에
동일한 값으로 지정
반환된 tensor객체를 numpy메서드로 변환하여 2*2크기의 2차원 배열로 변형
▶ 결과적으로 풀링층에는 학습되는 가중치가 없다.
풀링은 배치 차원이나 채널 차원으로 적용되지 않는다.
풀링층을 통과하기 전후로 배치 크기와 채널 크기는 동일하다
반응형
'인공지능' 카테고리의 다른 글
합성곱(4) (12) | 2023.01.18 |
---|---|
합성곱(3) (2) | 2023.01.18 |
합성곱(1) (1) | 2023.01.17 |
다중분류 신경망(3) (8) | 2023.01.13 |
다중분류 신경망(2) (0) | 2023.01.12 |
Comments