개발공부

CNN 모델링 과정, 코드 예제 본문

Python/Deep Learning

CNN 모델링 과정, 코드 예제

mscha 2022. 6. 14. 17:58

CNN(Convolution Neural Networks)

이미지를 flatten해서 모델링을 하고 학습을 하면, 그 이미지가 가지고있는

지역적 특성(사람을 예로 들면 눈과 코의 위치 관계 등..)이 사라지게 된다.

CNN은 이미지의 지역적 특성을 가진채 학습할 수 있게 처리하는 방식이다.

 

CNN 모델링 과정

 

 

1.  Convolution, 컨볼루션

1) kernel과 input image의 같은 자리끼리 곱하고 그 결과들의 합을 한다.

2) kernel을 이동시키며 같은 연산을 한다.

 

이 때 이동시키는 단위를 stride라고 한다.

EX) stride = 1

EX) stride = 2

 

2. Zero - padding, 제로 패딩

만약 5 X 5 의 이미즈를, 3 X 3인 커널로 컨볼루션 하면, 결과는 3 X 3의 feature map이 된다.

이렇게되면 이미지의 사이즈가 줄어들기 때문에, 사이즈를 조절하기 위해선 패딩을 사용하면 된다.

 

Convolution 컨볼루션 결과로 나오는 행렬 사이즈 계산법

I : 인풋 이미지 사이즈

K  : 커널 사이즈

P : Zero-padding의 수

S : Stride

 

3. Pooling(Downsampling)

데이터 사이즈를 작게 만드는 기법이다.

특징은 그대로 가지되, 컴퓨팅 효율을 높인다.

4. Flatten

 

5. Flatten 한 데이터를 ANN에 대입

 

모델링 예제

import tensorflow as tf
import tensorflow.keras
from keras.models import Sequential
from keras.layers import Dense, Flatten
from keras.layers import Conv2D, MaxPooling2D

model = Sequential()

# Convolution 하기
model.add(Conv2D(filters = 64, kernel_size = (3,3), activation = 'relu', input_shape = (28, 28, 1)))

# MaxPooling 하기
model.add(MaxPooling2D(pool_size=(2, 2), strides = 2))

# Flatten 하기
model.add(Flatten())

# Flatten 한 데이터를 ANN에 대입
model.add(Dense(units = 128, activation = 'relu'))
model.add(Dense(units = 10, activation = 'softmax'))

model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
model.fit(X_train, y_train, epochs = 5, validation_split = 0.2)