[삽질 기록하기] Keras custom trainer
2024.02.25 - [DataScience/Project] - [아이펠톤] DR그알 - DR Segmentation
[아이펠톤] DR그알 - DR Segmentation
아이펠에서 아이펠톤이라는 이름으로 프로젝트를 진행했습니다. 여기서 저는 DR그알이라는 팀을 만들고, 팀장 역할을 맡아 프로젝트를 진행했습니다. 사용했던 코드와 최종 발표자료는 https://gi
mkk4726.tistory.com
이 프로젝트를 하면서 시간을 가장 뺏어간 삽질입니다.
https://github.com/mkk4726/DR-GeuAl/blob/main/code/assets/one_mask/trainer.py
이런식으로 학습시키는 부분을 직접 짜면서 발생한 문제인데, 결과적으로는 인자를 빼먹어서 생긴 문제입니다.
1. 문제상황
이런식으로 2~5 에폭이 넘어가면 아에 학습이 멈춰버리는 문제가 발생했습니다.
모두 이랬으면 문제가 있구나 싶었을 것 같은데, 여러 조건을 실험하던 중에 특정 조건에서는 아래와 같이 학습이 또 잘됩니다.
그래서 처음에는 조건에 문제가 있다고 판단했습니다.
하지만 시간이 지나면서 10개 조건 중 1~2개만 학습이 되니까, 또 성능이 좋지 않으니 뭔가 문제가 있다고 판단했습니다.
그래서 하나씩 따져봤습니다.
2. 문제 추리기
지금은 기억이 잘 안나지만, 조졌다는 생각에 진짜 오만가지 방법을 다 써봤습니다.
그 중 가장 유력했던 후보가 기울기가 사라진다는 문제였습니다.
기울기를 뽑아보니 2~5 에폭 이후에는 기울기가 아에 0이 되어버리더라구요.
하지만 사용했던 loss 함수는 dice loss, 모델은 unet으로 왠만하면 기울기가 사라질 수 없는 구조라 뭐가 문젠지 모르겠다고만 생각했었습니다.
기울기도 바꿔보고, 이것저것 또 삽질했습니다.
3. 범인 찾음
문제는 생각보다 진짜 간단했습니다.
이 코드에서 "training=True" 인자를 빼먹어서 그런거였습니다.
모델은 결과값을 내놓을 때는 크게 2가지 상황인데, 학습과 추론입니다.
따라서 결과값을 받을 때 학습 상황임을 알려줘야하고, 그렇지 않으면 학습이 되지 않는 것입니다.
(간단히 설명하자면)
진짜 짠 코드만 몇백줄정도 되는 것 같은데, 그 중 한 줄, 또 그 안에서 인자 하나 빼먹어서 이런 문제가 발생한거라니....
그 순간은 조금 억울했지만, 100% 제 잘못이니 누구를 탓하겠습니까
비슷한 문제를 겪는 분들은 시간을 최대한 덜 날리시길...