지난 글에서 모델을 바꿔주면서 최고성능을 갱신했다 (0.77)
[CV 경진대회] 데이터 증강 기법, ViT 모델 사용
이제 여기서 더 나아가서 0.9까지 만들어보자!!!
모델 추론 변경
어디를 더 수정해 볼까 하다가 모델 학습 쪽에서 변화를 주었다.
지금 상황은 학습 데이터셋이 부족한 관계로 StratifiedKFold와 epoch를 같이 조합해서 진행해보려고 한다.
k-fold & epoch 조합
k-fold와 epoch를 함께 사용하는 것은 모델의 일반화 성능을 더욱 견고하게 평가하고 개선하기 위한 방법이다.
1. k-fold와 여러 epoch를 함께 사용하는 경우
- 장점: 각 폴드에서 epoch만큼 반복 학습을 진행하므로 모델이 안정적으로 수렴할 수 있다. 폴드마다 충분한 학습을 거쳐야 하므로 최종 성능이 높아질 가능성이 크다.
- 단점: 계산 비용이 크게 증가한다. k개의 폴드와 n번의 epoch를 수행하게 되면 전체 학습 시간은 k × n 만큼 증가하게 된다.
2. k-fold와 단일 epoch (epoch=1)만 사용하는 경우
- 장점: 학습 속도가 매우 빨라진다. 각 폴드에 대해 단 한 번의 epoch만 진행하므로 k번 학습하고 바로 결과를 얻을 수 있다.
- 단점: 모델이 충분히 학습되지 않은 상태에서 다음 폴드로 넘어가게 되어 최종 성능이 낮아질 수 있다. 특히 복잡한 모델에서는 수렴하지 않거나 불안정한 성능을 보일 수 있다.
k_folds 수를 5로 주고 epoch를 10으로 주고 진행해 봤다.
일단 학습과 검증이 잘 이뤄지고 있는데 과적합이 또 발생하고 있다.
train은 0.72 정도 나오는데 val f1은 0.01 이렇게 나온다...
과적합을 방지하기 위해 learning rate scheduler, dropout을 추가해 줬다.
이전에는 early stopping이 트리거 되었는데 fold를 돌 때는 10 epoch을 다 도는 게 조금 신기했다. 그러고 fold 5까지 전부 돌고 완료를 했다.
k-fold 교차 검증이 완료된 후, 최종적으로 테스트 데이터셋에 대한 예측을 수행하려면 각 폴드에서 학습된 모델을 테스트 데이터에 적용하여 예측 결과를 저장하고, 그 결과에서 최빈값(이미지 분류 시스템으로 class가 카테고리형 변수이기 때문이다)을 구해 예측을 도출하는 방식으로 진행했다.
이렇게 하고 이제 예측값을 도출해 내서 csv로 저장하려고 하는데 이런 에러가 났다.
왜 이렇게 개수가 훅 줄었지?라고 생각해 보니 지금 내가 kfold를 돌리고 나서 나온 결괏값을 저장하려고 했기 때문이었다.
즉 실제 테스트 데이터의 개수인 3140개가 아니라 각 폴드 예측 결과가 314개만 나오는 이유는 validate_one_epoch 함수가 각 폴드의 검증 데이터셋에 대해서만 예측을 수행하기 때문이었다.
사실 여기서 조금 이상한 게 1/5개면 약 600개 정도가 나와야 하는데 왜 여기서 314개만 나오는지는 모르겠지만 그래도 전체 데이터의 1/5개의 데이터만 검증 데이터로 두기 때문에 데이터 개수가 전체 테스트 데이터셋의 개수가 다르게 나왔다.
따라서 모델 학습을 완료한 후, 마지막 폴드가 아닌 각 폴드의 학습 결과로 다시 전체 테스트 데이터를 예측하도록 코드로 수정해 줬다.
그래서 각 epoch이 끝나고 전체 데이터셋에 대한 검증을 진행해 줬다.
# 각 폴드의 학습 완료 후 전체 테스트 데이터셋(tst_loader)에서 예측 수행
fold_predictions = []
model.eval()
with torch.no_grad():
for images, _ in tst_loader:
images = images.to(device)
preds = model(images)
logits = preds.logits if hasattr(preds, 'logits') else preds
fold_predictions.extend(logits.argmax(dim=1).cpu().numpy())
# 테스트 데이터에 대한 폴드 예측 결과 저장
all_predictions.append(fold_predictions)
이렇게 하니 성능이 개선되었다~!!
기존에 0.7718에서 0.8460까지 올렸다!
'Upstage AI Lab 4기' 카테고리의 다른 글
[CV 경진대회] offline 데이터 증강 그리고 하이퍼파라미터 수정 (7) | 2024.11.07 |
---|---|
[CV 경진대회] TTA 실패기,,, (0) | 2024.11.04 |
[CV 경진대회] 데이터 증강 기법, ViT 모델 사용 (0) | 2024.11.04 |
[Upstage AI Lab 4기] '아파트 실거래가 예측' 경진대회 Private Rank 3등 후기 (1) | 2024.09.17 |
[팀프로젝트] 페르소나를 이용한 오은영 박사님 챗봇 (2) - chat history와 주제와 관계 없는 질문 회피 (1) | 2024.08.19 |