59doit

합성곱(2) 본문

인공지능

합성곱(2)

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

텐서플로를 이용한 합성곱

텐서플로의 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