UOMOP

CNN model 생성 본문

Ai/DL

CNN model 생성

Happy PinGu 2022. 2. 6. 01:58
## CNN 모델을 생성해보자

import numpy as np
import pandas as pd
import os
from tensorflow.keras.layers import Input, Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.models import Model

input_tensor = Input(shape = (14, 14, 1))
x = Conv2D(filters = 4, kernel_size = 3, strides = 1, padding = "same", activation = "relu")
                                                                              (input_tensor)
x = Conv2D(filters = 6, kernel_size = 3, activation = "relu")(x)
x = MaxPooling2D(2)(x)

x = Flatten()(x)
x = Dense(50, activation = "relu")(x)
output = Dense(10, activation = "softmax")(x)


model = Model(inputs = input_tensor, outputs = output)
model.summary()

cnn의 input shape는 3차원이다. 위 코드에서는 channel이 1이기 때문에 (14, 14, 1)로 코딩한다.

첫 Conv2D에서 filter 4개를 이용하여 feature map을 만들었다. filter는 kernel로 이루어져 있는데, 이때 한 filter의 kernel 수는 channel의 수와 같다. 한 kernel의 크기는 (3, 3)이고 1칸씩 이동하며 feature를 추출하게 된다. 만약 매개변수 padding을 따로 지정하지 않았다면 default값인 "valid"가 되고 padding이 이루어지지 않을 것이다. 위 코드에서는 padding = "same"으로 두었기 때문에 input의 크기와 feature map의 크기 같다.
filter 4개로 피쳐 추출을 진행하였기 때문에 output은 (14, 14, 4)이다.

두번째 Conv2D에서는 크기가 (3, 3)인 filter 6개를 이용하였지만 padding을 따로 지정하지 않았으므로 feature map의 크기를 줄 것이다. 여기서 각 filter의 shape이 중요하다. 첫 Conv2D에서 ouput은 (14, 14, 4)였고 channel이 4개가 된 셈이다. 그렇기 때문에 filter의 kernel 또한 4여야만 한다. 총 6개의 filter를 이용했기 때문에 output은 (12, 12, 6)이다.

MaxPooling(2)로 pooling을 하기 때문에 data의 크기가 감소한다. pooling은 sub sampling이라고도 불린다. sub sampling은 해당하는 image data를 작은 size의 image로 줄이는 과정이다. pooling을 통해서 parameter를 줄일 수 있고, 해당 network의 표현력이 감소하여 overfitting을 억제할 수 있다.

pooling을 통해서 크기는 2배가 줄었지만 channel 수는 감소하지 않았다. 현재 output은 (6, 6, 6)인 상태이고 classification을 위해 1차원을 바꿔줘야 한다. 이때 Flatten()을 사용한다.

 

 

 

 

 

'Ai > DL' 카테고리의 다른 글

성능 향상 using Batch_normalization  (0) 2022.02.07
feature map size 계산  (0) 2022.02.07
Functional API  (0) 2022.02.06
미니배치 경사 하강법 using algorithm (boston)  (0) 2022.02.01
확률적 경사 하강법 using algorithm (boston)  (0) 2022.02.01
Comments