딥러닝 실험을 진행 할 때에는 신경을 써야할 변수가 많다. 하지만 그 중 가장 중요한 것은 변인통제라고 생각한다. 예를 들어 데이터가 들어가는 순서만 바뀌어도 모델의 성능은 바뀌게 된다. 이런 문제를 제어하고 실험을 재현 가능하게 하기 위해서 고려 해야하는 사항들을 살펴보자.
최종 코드
우선 최종 코드부터 적어두겠다. 아래의 코드를 사용하면 (deterministic은 True) 같은 실험을 반복해도 재현이 보장된다.
import random
import numpy as np
import torch
seed = 2021
deterministic = True
random.seed(seed)
np.random.seed(seed)
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
if deterministic:
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
1. Python 자체의 random seed를 고정
random.seed(seed)
2. Numpy Library 의 random seed를 고정해준다.
np.random.seed(seed)
3. Pytorch의 random seed를 고정해준다.
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
4. cudnn의 random seed를 고정해준다.
if deterministic:
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
cudnn random seed를 고정하게 될 경우 학습 속도가 느려진다는 단점이 있다. 나의 경우는 정확한 모델 성능 재현이 필요한 상황이 아니면 cudnn은 제외하고 나머지 seed만 고정하고 사용한다.
'기록' 카테고리의 다른 글
vim 자동 들여쓰기 해제 (1) | 2023.11.22 |
---|---|
ImportError: libGL.so.1: cannot open shared object file: No such file or directory (0) | 2023.10.31 |
torchviz - Pytorch backward pass 시각화 (0) | 2023.09.18 |
pydensecrf 설치 (0) | 2021.10.25 |