🔗 이 글은 서울시립대학교 박사과정에 재학 중인 안승환 연구원의 논문 실험계획 발표를 바탕으로 한 글임을 알립니다.
reference : https://github.com/an-seunghwan
📌GitHub Repository
- main.py
- inference.py
- metric.py
- modules
- simulation.py
- datasets.py
- model.py
- train.py
metrics.py
- data
- assets
- README.md
📌파일 별 유의사항
main.py
- goal : 모델 학습 & 모형 저장
- argparse : hyper-parameter dictionary
- 목적 : 파이썬 안의 터미널로 돌려줄 때 인자값을 넘겨주기 위함.
- 구성 : argparse, seed, data, model, 학습, model.save
- 장점 : 어떤 것이 하이퍼 파라미터인지 알기 쉬움, default값 정의가 쉬워짐.
- 주의사항 1. 반드시 random seed 설정 할 것 (반복실험 해야함, 보통 5~ 10번 정도)
2. epoch 중간 결과는 항상 monitoring (학습이 제대로 이루어지고 있는지, loss가 맞게 떨어지고 있는지 알기위함)
+ 저장(wandb)
3. model save
4. main.py는 최대한 간결하게 구성하는 것 나중에 코드 유지&보수를 위해 좋음.
inference.py
- goal : 저장된 model을 이용해 결과를 도출하는 코드(ex. 시각화).
metric.py
- goal : 저장된 model을 이용해 선정된 metric을 계산.
✔️main.py가 모델을 학습하고, 모형을 저장하는 것이 목적이라면, inference.py와 metric.py는 학습한 모형을 써먹는 부분이다.
modules/simulation.py : Reproducibility를 위해, torch, numpy, python의 random seed를 고정
def set_random_seed(seed):
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(seed)
random.seed(seed)
refererence : https://github.com/an-seunghwan/synthesizers/blob/main/evaluation/simulation.py
modules/datasets.py
- 데이터의 행을 shuffle할 것인가?
- shuffle의 random seed는 고정인가?
- train&test split이 필요한가? train&test split을 한다면 비율은 어떻게 나눌 것인가?
- train&test split의 random seed는 고정인가?(simulation.py의 random seed와 구분)-동일한 데이터에 대해서 반복 실험을 진행해야 함
modules/model.py
- model의 output차원이 맞는가?
→ model의 output차원을 확인하고 검증해볼 수 있는 main() function을 추가.
(모델의 입력과 출력에 대한 차원이 맞으면, 어느 정도 model이 정확하게 구축되었다고 생각할 수 있음)
- forward function: forward function에 모든 기능을 정의하지 말고, method들의 조합으로 함수를 구성하는 것이 debugging에 유리.
modules/train.py
- epoch 1번에 대한 함수.
- 실질적으로 손실함수가 정의되는 부분 (→ main 함수가 간략해짐)
modules/data
assets
- inference.py, metric.py의 결과를 저장 → 논문에 쓰일 결과물