인공지능/딥러닝

CNN 코딩 기초

해피밀세트 2020. 6. 12. 17:26
반응형

 

 

 

CNN (Convolution Neural Network)

  • 합성곱 신경망
  • convolution층과 pooling층을 포함하는 신경망

 

반복[conv층 -> pooling층] -> fully connected층

  • conv층 : 이미지의 특징을 추출하는 계층
  • pooling층 : 특징의 일부분만 취하는 계층 (max pooling 가장 많이 )

 

합성곱 계산

 

conv층 (합성곱 계층)

  • feature map 만들고 feature map 선명하게 해주는
  • image : 1,3,3,1 (이미지갯수, 높이, 너비, 색수)
  • filter : 2,2,1,1 (높이,너비,색수,필터수)
  • striide : 1x1
  • padding : valid

 

입력데이터 (3, 3)

1 2 3
4 5 6
7 8 9

 

filter (2, 2)

1 1
1 1

 

합성곱 결과 (2, 2)

1*1+1*2+1*4+1*5=12 1*2+1*3+1*5+1*6=16
1*4+1*5+1*7+1*8=24 1*5+1*6+1*8+1*9=28

  input - filter            3 - 2

---------------- + 1  = --------- + 1 = 2    

      stride                    1

 


 

CNN (conv->polling) 구현하기

# 라이브러리 불러오기

import numpy as np

import tensorflow as tf

import matplotlib.pyplot as plt

 

# 대화형 처리
# 세션을 열고 닫지않아도 바로바로 처리하게 만듬

sess = tf.InteractiveSession()

 

# 인풋 이미지 만들기

image = np.array([[[[1],[2],[3]],
                        [[4],[5],[6]],
                        [[7],[8],[9]]]],dtype=np.float32)

# 이미지 모양 확인

image.shape

# 인풋 이미지 확인

plt.imshow(image.reshape(3,3))

# 필터 만들기

filter = np.array([[[[1.]],[[1.]]],

                   [[[1.]],[[1.]]]])

filter.shape

# 필터 이미지 확인

plt.imshow(filter.reshape(2,2))

# 합성곱층
# padding='VALID' : 패딩을 사용하지 않음

conv2d = tf.nn.conv2d(image,filter,strides=[1,1,1,1],padding='VALID')

 

# 합성곱 실행

conv2d_img = conv2d.eval()

 

# 결과값의 모양 확인

conv2d_img.shape

# 결과값을 원하는 형태로 reshape

conv2d_img.reshape(2,2)

# 결과값 이미지로 확인

plt.imshow(conv2d_img.reshape(2,2))

# pooling(max_pool)
# 이미지중에 가장 큰값을 뽑아냄

pool = tf.nn.max_pool(conv2d_img,ksize=[1,2,2,1],

                     strides=[1,1,1,1],padding="VALID")

pool.shape

pool.eval()

 

반응형