반응형
Conv2D, max pooling, Dropout, Flatten
CNN 개념 이미지 인식과 음성 인 식 등 다양한 곳에서 사용되는데, 특히 이미지 인식 분야에서 딥러닝을 활용한 기법은 거의 다 CNN을 기초로 한다. ‘합성곱 계층 Conv ’과 ‘풀링 계층 Pooling ’이
oaho.tistory.com
MNIST 데이터셋의 손글씨 숫자 인식
코랩에서 진행
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
from tensorflow.keras.dataset import mnist
from tensorflow.keras.utils import to_categorical
데이터 불러오기
(train_x, train_y), (test_x, test_y) = keras.datasets.mnist.load_data()
Min-Max Scaling
max_x, min_x = train_x.max(), train_x.min()
train_x = (train_x - min_x) / (max_x - min_x)
test_x = (test_x - min_x) / (max_x - min_x)
One-Hot Encoding
class_n = len(np.unique(train_y))
train_y = to_categorical(train_y, class_n)
test_y = to_categorical(test_y, class_n)
Building a CNN model
model = Sequential()
#인풋 레이어
model.add(Input(shape=(28, 28, 1)))
# convolution
model.add(Conv2D(filters=32,
kernel_size=(3,3),
padding='same',
strides=(1,1),
activation='relu'))
#BatchNormalization
model.add(BatchNormalization())
#convolution
model.add(Conv2D(filters=32,
kernel_size=(3,3),
padding='same',
strides=(1,1),
activation='relu'))
# BatchNormalization
model.add(keras.layers.BatchNormalization())
# MaxPooling
model.add(MaxPool2D(pool_size=(2, 2),
strides=(2,2)))
# Dropout
model.add(Dropout(0.25))
# Convolution
model.add(Conv2D(filters=64,
kernel_size=(3,3),
padding='same',
strides=(1,1),
activation='relu'))
# BatchNormalization
model.add(BatchNormalization())
# Convolution
model.add(Conv2D(filters=64,
kernel_size=(3,3),
padding='same',
strides=(1,1),
activation='relu'))
# BatchNormalization
model.add(BatchNormalization())
# MaxPooling
model.add(MaxPool2D(pool_size=(2,2),
strides=(2,2)))
# Dropout
model.add(Dropout(0.25))
# Flatten
model.add(Flatten())
# Fully Connected Layer
model.add(Dense(512, activation='relu'))
# BatchNormalization
model.add(BatchNormalization())
# 아웃풋 레이어
model.add(Dense(10, activation='softmax'))
# 컴파일
model.compile(loss='categorical_crossentropy', metrics=['accuracy'],
optimizer='adam')
모델 최적화
from tensorflow.keras.callbacks import EarlyStopping
es = EarlyStopping(monitor = 'val_loss',
min_delta=0,
patience=5,
verbose=1,
restore_best_weights=True)
hist = model.fit(train_x, train_y, validation_split=0.2,
batch_size=128, epochs=30, callbacks=[es], verbose=1)
출력 :
💡 최대 30 epoch까지 모델을 훈련하고 epoch 수에 대한 훈련 손실 값과 검증 손실 값을 표시한다. 그러나 callback의 patience은 5로 설정되어 있으므로 모델은 최적 이후에 5 epoch를 더 훈련한다.
12번째 에포크에서 베스트 모델을 만들었고 17번째 에포크에서 학습이 중단되었다. validation loss가 12번째에서 가장 낮다.
검증셋과 학습셋의 오차 저장
y_vloss = hist.history['val_loss']
y_loss = hist.history['loss']
그래프로 표현
x_len = np.arange(len(y_loss))
plt.plot(x_len, y_vloss, marker='.', c="red", label='Testset_loss')
plt.plot(x_len, y_loss, marker='.', c="blue", label='Trainset_loss')
plt.legend(loc='upper right')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
출력:
Epoch의 수가 12를 넘어서 학습 데이터에 대한 모델의 과적합을 나타내는 검증 손실(validation loss)이 증가한다는것을 알 수 있다.
반응형
'AI > DeepLearning' 카테고리의 다른 글
자연어 처리를 위한 텍스트 전처리 - 1. 텍스트의 토큰화 (0) | 2023.04.01 |
---|---|
이미지들을 배열 데이터셋으로 만들기 (0) | 2023.03.31 |
Conv2D, max pooling, Dropout, Flatten (0) | 2023.03.17 |
CNN 개념 (0) | 2023.03.14 |
multi-input & Concatenate layer / Add layer (0) | 2023.03.06 |