일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 순환 신경망
- NLTK
- 출력층
- 텍스트 마이닝
- RNN
- 생성모델
- 프로그래머스
- 풀링층
- 임베딩
- 원-핫 인코딩
- 이미지 분류
- 카운트 벡터
- 코딩테스트
- 코랩
- 입력층
- cnn
- 합성곱 신경망
- 클러스터링
- COLAB
- KONLPY
- 합성곱층
- 성능 최적화
- 전이학습
- 양방향 RNN
- 딥러닝
- 망각 게이트
- 과적합
- 자연어 전처리
- 시계열 분석
- 완전연결층
Archives
- Today
- Total
Colab으로 하루에 하나씩 딥러닝
성능 최적화_3.조기 종료를 통한 최적화 본문
728x90
조기 종료(Early Stopping)
- 뉴럴 네트워크가 과적합을 회피하는 규제 기법
- 매 에포크마다 테스트 데이터셋에 대한 오차가 증가하는 시점에서 훈련을 멈추도록 조정
- 종료 시점을 확인하기 위해 콜백(callback) 함수를 무조건 함께 사용
조기 종료 실습
### 라이브러리 호출
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation
from tensorflow.keras.layers import Embedding
from tensorflow.keras.layers import Conv1D, GlobalMaxPooling1D
from tensorflow.keras.datasets import imdb
import tensorflow as tf
import numpy as np
### 하이퍼파라미터 초기화
max_features = 5000
maxlen = 400
batch_size = 32
embedding_dims = 50
filters = 250
kernel_size = 3
hidden_dims = 250
epochs = 300
np.random.seed(7)
### 체크포인트 설정
import os
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path, verbose=1) # 설명 1
상세 설명
- 설명 1:
- 훈련하는 동안 체크포인트를 저장하기 위해 콜백 함수를 사용
- 콜백 함수는 훈련 중간과 훈련 마지막에 체크포인트를 저장하는 데 많이 사용하는 방법
- 다시 훈련하지 않고 모델을 재사용하거나 의도치 않게 훈련이 중지된 경우 이어서 훈련할 수 있음
### 데이터셋 메모리 로딩
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)
### 모델 생성
model = Sequential()
model.add(Embedding(max_features,
embedding_dims,
input_length=maxlen)) # 설명 1
model.add(Dropout(0.2))
model.add(Conv1D(filters,
kernel_size,
padding='valid',
activation='relu',
strides=1)) # 설명 2
model.add(GlobalMaxPooling1D())
model.add(Dense(hidden_dims))
model.add(Dropout(0.2))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.summary()
상세 설명
- 설명 1:
- Embedding: 텍스트를 양의 정수로 변환해 주는 역할
- max_features: 단어 사전의 크기
- embedding_dims: 단어를 인코딩 후 나오는 벡터 크기
- input_length=maxlen: 문장 길이
- Conv1D: 문장 해석을 위해 합성곱층을 이용함
- 글로벌 최대 풀링(GlobalMaxPooling1D): 합성곱층이 문장을 훑어 가면서 뽑아낸 특성 벡터 중 가장 큰 백터를 선택
- Embedding: 텍스트를 양의 정수로 변환해 주는 역할
### 조기 종료가 추가되지 않은 모델 훈련
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2,
callbacks=[cp_callback])
### 모델 평가
from tensorflow.keras.models import load_model
model = load_model(checkpoint_path)
scores = model.evaluate(x_test, y_test, verbose=1)
print(f'Score: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
### 조기 종료를 적용한 모델 훈련
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
keras_callbacks=[
EarlyStopping(monitor='val_loss', patience=30, mode='min', min_delta=0.0001),
ModelCheckpoint(checkpoint_path, monitor='val_loss', save_best_only=True, mode='min')
] # 설명 1
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
validation_split=0.2,
callbacks=keras_callbacks)
상세 설명
- 설명 1:
- EarlyStopping: 해당 조건이 되면 학습을 조기 종료함
- monitor: 관찰하고자 하는 항목. ex) val_loss, val_acc
- patience: 개선이 없다고 바로 종료하지 않고 개선이 없는 에포크를 얼마나 기다려 줄지 지정
- mode: 관찰 항목에 대한 개선이 없다고 판단하기 위한 기준을 지정
- min_delta: 개선되고 있다 판단하기 위한 최소 변화량
- EarlyStopping: 해당 조건이 되면 학습을 조기 종료함
### 모델 평가
model = load_model(checkpoint_path)
scores = model.evaluate(x_test, y_test, verbose=1)
print(f'Score: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
상세 설명
- 설명 1:
- 체크포인트를 이용한 정확도를 확인하였지만 조기 종료는 성능 최적화를 보장하지 않음
- 조기 종료는 훈련 횟수를 줄여 훈련의 종료 시점을 알 수 있게 함
참고: 서지영, 『딥러닝 텐서플로 교과서』, 길벗(2022)
'딥러닝_개념' 카테고리의 다른 글
클러스터링_2.가우시안 혼합 모델 (0) | 2023.01.30 |
---|---|
클러스터링_1.K-평균 군집화 (0) | 2023.01.27 |
성능 최적화_2.드롭아웃을 통한 최적화 (0) | 2023.01.25 |
성능 최적화_1.배치 정규화를 통한 최적화 (0) | 2023.01.21 |
시계열 분석_5.양방향 RNN (0) | 2023.01.19 |