https://opentutorials.org/module/5268/29788
다섯번째 딥러닝 2 - Conv2D - Tensorflow 102 - 이미지 분류(CNN)
수업소개 컨볼루션에 대한 이해와 컨볼루션 레이어의 사용법을 익힙니다. 컨볼루션 필터의 역할을 중심으로 컨볼루션 레이어에 대한 이해를 합니다. 컨볼루션 연산이 어떻게 이루어 지는지
opentutorials.org
7강 Conv2D
Convolution (=합성곱)
특정한 패턴의 특징이 어디서 나타나는지를 확인하는 도구
convolution 필터를 이용해서 연산을 하면 결과가 2차원 형태의 숫자집합으로 만들어짐. 이미지로 표현 가능.
👉 특징에 대한 위치 정보가 표시된 지도 = 특징맵 feature map
👉 필터 하나가 특징맵 하나를 만듦.
convolution laer에서 결정해야할 것
- 필터셋을 몇 개 사용할 것인가
- 필터셋의 사이즈를 얼마로 할 것인가
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
독립 = 독립.reshape(60000, 28, 28, 1) #3차원 형태로 변형해주기 위해
종속 = pd.get_dummies(종속)
X = tf.keras.layers.Input(shape=[28, 28, 1]) # convolution 연산은 3차원 형태의 관측치를 입력으로 받음.
H = tf.keras.layers.Conv2D(3, kernel_size=5, activation='swish')(X) # 3은 필터셋의 개수, kernel_size는 필터셋 사이즈 [5, 5] -> 3개의 특징맵 = 3채널의 특징맵
H = tf.keras.layers.Conv2D(6, kernel_size=5, activation='swish')(H) # 6개의 특징맵 = 6채널의 특징맵
H = tf.keras.layers.Flatten()(H) # 표로 만든다.
convolution 연산은 3차원 형태의 관측치를 입력으로 받음.
👉 color 이미지가 3차원 형태이기 때문에 흑백 이미지도 3차원 형태로 변형해주는 것.
7-1강 필터의 이해
- 물음표는 앞선 채널의 갯수
- 필터셋은 이해를 돕기위해 사용한 용어 -> 그냥 필터라고 함.
- 필터셋을 이용해서 필터맵 생성 -> 사이즈는 필터사이즈(5) 에서 -1 만큼 감소(28-4)
- 컴퓨터에게 이 이미지들이 0~9까지 중 어느 숫자인지 판단하기 가장 좋은 특징맵 6개를 찾아달라고 명령하는것과 같음.
👉 특징 자동 추출기!
7-2강 연산의 이해
8강 Conv2D (실습)
실습 코드는 드라이브에 업로드
###########################
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
###########################
# 데이터를 준비하고
(독립, 종속), _ = tf.keras.datasets.mnist.load_data()
독립 = 독립.reshape(60000, 28, 28, 1)
종속 = pd.get_dummies(종속)
print(독립.shape, 종속.shape)
###########################
# 모델을 만들고
X = tf.keras.layers.Input(shape=[28, 28, 1])
H = tf.keras.layers.Conv2D(3, kernel_size=5, activation='swish')(X)
H = tf.keras.layers.Conv2D(6, kernel_size=5, activation='swish')(H)
H = tf.keras.layers.Flatten()(H)
H = tf.keras.layers.Dense(84, activation='swish')(H)
Y = tf.keras.layers.Dense(10, activation='softmax')(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics='accuracy')
###########################
# 모델을 학습하고
model.fit(독립, 종속, epochs=10)
###########################
# 모델을 이용합니다.
pred = model.predict(독립[0:5])
pd.DataFrame(pred).round(2)
# 정답 확인
종속[0:5]
# 모델 확인
model.summary()