과적적합(Overfitting)을 막는 방법

과적합을 막는 방법

1.데이터의 양을 늘리기

  • 만약, 데이터의 양이 적을 경우에는 의도적으로 기존의 데이터를 조금씩 변형하고 추가하여 데이터의 양을 늘리기도 하는데 이를 데이터 증식 또는 증강(Data Augmentation)이라고 합니다.
  • 이미지의 경우에는 데이터 증식이 많이 사용되는데 이미지를 돌리거나 노이즈를 추가하고, 일부분을 수정하는 등으로 데이터를 증식시킵니다.
  • 텍스트 데이터의 경우에는 데이터를 증강하는 방법으로 번역 후 재번역을 통해 새로운 데이터를 만들어내는 역번역(Back Translation) 등의 방법이 있습니다.

2.모델의 복잡도를 줄이기

3.가중치 규제(Regularization) 적용하기

4.드롭아웃(Dropout)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#예시
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dropout, Dense

max_words = 10000
num_classes = 46

model = Sequential()
model.add(Dense(256, input_shape=(max_words,), activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50% <- 여기서 드롭아웃 50%만 사용한다는 의미(랜덤으로)
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5)) # 드롭아웃 추가. 비율은 50%
model.add(Dense(num_classes, activation='softmax'))

# 코드 출처 : 위키독스(wikidocs)

pad_sequences 사용하는 이유

  • 샘플의 길이가 서로 다를 수 있는데, 모델의 입력으로 사용하려면 모든 샘플의 길이를 통일해주는 함수
  • maxlen = 모든 데이터에 대해서 정규화 할 길이
  • padding = ‘post’로 입력 시 뒤에께 잘림, 보통 ‘post’를 사용함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from tensorflow.keras.preprocessing.sequence import pad_sequences

pad_sequences([[1, 2, 3], [3, 4, 5, 6], [7, 8]], maxlen=3, padding='pre')
#결과
array([[1, 2, 3],
[4, 5, 6],
[0, 7, 8]], dtype=int32)


pad_sequences([[1, 2, 3], [3, 4, 5, 6], [7, 8]], maxlen=3, padding='post')
#결과
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 0]], dtype=int32)
Author

InhwanCho

Posted on

2022-12-01

Updated on

2022-12-01

Licensed under

Comments