오답노트
[Keras] CNN 관련 레이어 - Conv2D, MaxPool2D 본문
# 라이브러리 호출
import tensorflow as tf
from tensorflow import keras
from keras.layers import Input, Dense, Conv2D, MaxPool2D, BatchNormalization, Dropout, Flatten
from keras.models import Model
from keras.backend import clear_session
from keras.callbacks import EarlyStopping
import numpy as np
# 데이터 불러오기
(x_train, y_train), (x_val, y_val) = tf.keras.datasets.mnist.load_data()
# 데이터 전처리
x_val = x_val.reshape(-1,28,28,1) #gray scale image shape 명시
# 스케일링
max_num,min_num = x_train.max() , x_train.min()
x_train = (x_train - min_num) / (max_num - min_num)
x_val = (x_val - min_num) / (max_num - min_num)
#one hot encoding
from tensorflow.keras.utils import to_categorical
n_class = len(np.unique(y_train))
y_train = to_categorical(y_train,n_class)
y_val = to_categorical(y_val,n_class)
layers.Conv2D
Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu')(il)
컨볼루션을 수행하는 레이어다.
- filters : 해당 레이어를 통해 만들 feature의 개수를 의미한다.
- kernel_size : 이전 레이어에 적용할 필터의 크기이다.
- strides : 필터가 움직이는 거리를 설정한다. 기본은 (1,1)이고 옵션으로 지정하여 사용할 수 있다.
- padding : 컨볼루션의 특성상 원본 데이터의 크기가 줄어들고, 가장자리 데이터 들은 중요도가 떨어질 수 밖에 없다. 이때 패딩에 same을 입력하면, 데이터의 입력 크기와 출력 크기가 같게 된다. 기본은 valid이다.
- activation : activation 함수를 입력할 수 있다.
layers.MaxPool2D
MaxPool2D(pool_size=(2,2))(hl)
Max Pooling을 수행하는 레이어다.
- pool_size : Max Pooling을 수행할 필터의 크기를 설정한다.
- strides : 필터가 움직이는 거리를 설정한다. 기본은 pool_size의 크기를 따라간다.
실습 코드
il = Input((28,28,1))
hl = Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu')(il)
bl = BatchNormalization()(hl)
hl = MaxPool2D(pool_size=(2,2))(bl)
hl = Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu')(hl)
hl = MaxPool2D(pool_size=(2,2))(hl)
bl = BatchNormalization()(hl)
fl = Flatten()(bl)
dl = Dropout(0.25)(fl)
hl = Dense(128,'relu')(dl)
ol = Dense(n_class,'softmax')(hl)
model = Model(il,ol)
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer='adam',
metrics=['accuracy'])
model.summary()
'''
Model: "model_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_4 (InputLayer) [(None, 28, 28, 1)] 0
conv2d_6 (Conv2D) (None, 28, 28, 64) 640
batch_normalization_6 (Batc (None, 28, 28, 64) 256
hNormalization)
max_pooling2d_6 (MaxPooling (None, 14, 14, 64) 0
2D)
conv2d_7 (Conv2D) (None, 14, 14, 64) 36928
max_pooling2d_7 (MaxPooling (None, 7, 7, 64) 0
2D)
batch_normalization_7 (Batc (None, 7, 7, 64) 256
hNormalization)
flatten_3 (Flatten) (None, 3136) 0
dropout_1 (Dropout) (None, 3136) 0
dense_2 (Dense) (None, 128) 401536
dense_3 (Dense) (None, 10) 1290
=================================================================
Total params: 440,906
Trainable params: 440,650
Non-trainable params: 256
_________________________________________________________________
'''
'Python > DL' 카테고리의 다른 글
[YOLO] Object Detection From Pretrained Model (0) | 2022.09.22 |
---|---|
[YOLO] YOLO(You Only Look Once) - Object Detection (2) | 2022.09.21 |
[DL] CNN (Convolutional Neural Network) (0) | 2022.09.19 |
[Keras] 모델 성능에 유용한 Layer (0) | 2022.09.19 |
[Keras] 연산 Layer (0) | 2022.09.18 |