본문 바로가기
Backend MLOps/MyTemplate

[DLTemplate] #4 trainer 정리 -3 kfold

by SteadyForDeep 2021. 9. 27.
반응형

kfold 가 진행될 수 있도록 모델 트레이너에 녹여보자.

 

우선은 아래의 링크를 참고했음을 알린다.

https://www.machinecurve.com/index.php/2021/02/03/how-to-use-k-fold-cross-validation-with-pytorch/

 

K-fold Cross Validation with PyTorch – MachineCurve

Explanations and code examples showing you how to use K-fold Cross Validation for Machine Learning model evaluation/testing with PyTorch.

www.machinecurve.com

 

하나의 sweep_config 가 결정되면 그 아래로 k번의 fold 가 발생해야하므로

trainer.py의 train함수 안에서 루프가 돌 수 있도록 해준다.

위의 링크에서는 모델의 내부 기능을 통해 파라미터를 리셋하도록 하고 있지만

나는 모델이 locals()에 존재하는 값이라면 지워버리고 새로 만들도록 하겠다.

이렇게 지정해 줌으로 k-fold를 적용하여 학습이 진행되게 할 수 있다.

 

다만 kfold를 위와같이 구현할 경우 wandb와 함께 사용하기는 매우 불편하다.(20210927 기준)

왜냐하면 wandb의 핵심적인 객체인 agent와 Run이 하나의 config 만을 다룰 수 있기 때문에(추측)

계속해서 overwrite 되는 현상이 발생한다.

agent를 사용하지 않고 하나의 script에서 여러번 wandb.init()을 하면 문제가 없다.

밤을 새면서 들여다봤지만 모든 경우의 수에서 실패한 것으로 보아 아직 기술상 구현이 안되어 있는 모양이다.

 

따라서 single fold 를 이용해서 sweep을 진행하고 상위권에 위치하는 parameters끼리 kfold 를 진행하도록 해야한다.

 

이때는 pyyaml을 이용해서 config를 만들고 agent를 실행하면 된다.

반응형

댓글