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]], |
|
# 이미지 모양 확인 image.shape |
|
# 인풋 이미지 확인 plt.imshow(image.reshape(3,3)) |
|
# 필터 만들기 filter = np.array([[[[1.]],[[1.]]], [[[1.]],[[1.]]]]) filter.shape |
|
# 필터 이미지 확인 plt.imshow(filter.reshape(2,2)) |
|
# 합성곱층 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() |
'인공지능 > 딥러닝' 카테고리의 다른 글
StarGAN v2: Diverse Image Synthesis for Multiple Domains 논문 리뷰 (1) | 2022.01.25 |
---|---|
CNN으로 강아지,고양이 분류하기 (13) | 2020.06.12 |
신경망을 이용한 붓꽃 데이터 분류하기 (0) | 2020.06.12 |
텐서플로를 이용한 신경망 구현 (0) | 2020.06.12 |
텐서플로 - 설치, 상수/변수 선언, 메소드 (0) | 2020.05.28 |