다음 글에서 재현성을 위해 설정해야하는 것들은 다음과 같다.
import random
random_seed = 1
torch.manual_seed(random_seed)
torch.cuda.manual_seed(random_seed)
torch.cuda.manual_seed_all(random_seed) # if use multi-GPU
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(random_seed)
random.seed(random_seed)
이것까지는 좋은데 주의해야할 점이 있다.
예를 들어 내가 어떤 random integer를 뽑는 상황이 온다고 하자.
그러면 seed를 정해놓고 뽑기 때문에 항상 같은 결과가 나올 것이라 생각할 수 있지만
하나의 코드 안에서 여러 번 random으로 뽑으면 개별 결과는 달라진다.
a = np.random.randn(1)
b = np.random.randn(1)
# a ~= b
따라서 jupyter notebook과 같이 코드를 새로 컴파일하는 것이 아니라 지속적으로 인터프리터처럼 사용하는 경우에는 seed를 고정해놔도 위의 코드를 계속 반복해서 실행을 시키면 a,b 값이 seed가 정해놓은 순서에 따라 생성되므로 재현성에 문제가 생길 수 있다.
'연구 Research > 인공지능 Artificial Intelligent' 카테고리의 다른 글
[인공지능] 인공지능 라이브러리 정리 (0) | 2023.08.24 |
---|---|
[JAX] JAX에서 gradient 추척을 멈추는 방법 (0) | 2023.08.22 |
Neural networks의 convergence, convexity에 대한 논문 (0) | 2023.07.31 |
[JAX] JAX 기반 Neural ODE 라이브러리 : diffrax (0) | 2023.07.28 |
[JAX] 학습한 모델 저장 및 로드 (0) | 2023.06.19 |