over-fitting: 모델이 학습 데이터만 과하게 학습하여 새로운 데이터(test)에서는 일반화 성능이 떨어지는 현상
=> train 시 높은 정확도 & 낮은 loss, test 시 낮은 정확도 & 높은 loss 발생
쉽게 말해서 모델이 학습 데이터셋을 외운 상태라고 볼 수 있다.
이처럼 모델이 과적합 상태가 되면 학습 단계에서만 높은 성능을 내고 실제 테스트에서는 낮은 성능을 보이게 된다.
Epoch을 필요 이상으로 주게 될 시 발생한다.
train 데이터셋을 과도하게 학습 -> 해당 데이터셋의 노이즈, 패턴 등을 암기 -> 깡통 모델이 뿅
가장 고성능의 에폭 값은 train과 val의 loss가 갑자기 과하게 벌어지는 지점에서 얻을 수 있다.
*val은 test를 수행하기 전 예비 test 느낌이라고 보면 된다.
그러나 요즘은 모델이 과적합 상태에 빠지지 않도록 Early Stopping과 Model Checkpoint를 사용하여 자동으로 제어할 수 있다.
위에서 말한 과정 그대로 train과 val의 loss 격차가 커지기 시작하는 시점에서 학습을 자동으로 중단 -> 그때의 모델 가중치를 best.pt로 저장
여에서 best.pt 파일이 val의 loss가 최소가 되는 시점의 모델(= train과 val의 균형이 가장 잘 맞는 지점의 모델)이다.
-
예제 코드
from ultralytics import YOLO
# 모델 불러오기
model = YOLO('yolov8n.pt')
# 학습
results = model.train(
data='dataset.yaml', # dataset 설정 파일
epochs=100,
patience=3, # 성능이 3 Epoch 동안 개선되지 않으면 Early Stopping
batch=16, # 배치 크기
imgsz=640,
project='runs/train', # 저장 폴더
name='exp', # 실험 이름
exist_ok=True # 폴더 덮어쓰기 허용
)
학습하면서 train loss와 val loss를 매 epoch마다 비교함 -> 일정 epoch 동안 val loss가 개선되지 않으면 자동으로 학습 중단 (Early Stopping)
중단과 동시에 val loss가 가장 낮았던 시점의 가중치(best.pt) 를 저장
=> best.pt 얻기 가능
배치에 관해서는 추후 내용 삽입
'LAB' 카테고리의 다른 글
| 영상 데이터셋 .arrow train (실패 💀) (0) | 2025.11.05 |
|---|---|
| [ROS2] 노드 간 양방향 통신 시뮬레이션 구현 (0) | 2025.11.02 |
| [ML] model train - 모델 학습시키는 방법 (기초) (0) | 2025.11.01 |
| 연구 내용 정리 (0) | 2025.10.29 |
| [Neo4j] .dump file 불러오기 (1) | 2025.04.09 |