-
[tensorflow/pytorch] random seed 설정딥러닝 2021. 3. 15. 15:53
프로젝트 끝나고도 너무 바빴고 많은 것들을 해서 한동안은 정리하는 시간을 가지려고 한다.
그리고 velog로 옮길까 했지만 여기가 더 편해서 velog에 작성한 것을 여기로 옮긴다.
DL 을 설계하고 재현성에서 문제가 생기는 경우가 많다.
대회에서는 다시 학습했을 때, 동일한 성능이 나와야 스코어를 인정해주는데 해당 부분에서 탈락하는 팀을 간혹 봤다.
pytorch의 경우 [해당 링크](https://hoya012.github.io/blog/reproducible_pytorch/)에서 보고 따라하면 된다.
짧게 정리하자면 아래와 같다.
# pytorch random seed import torch import numpy as np import random random_seed = 42 torch.manual_seed(random_seed) torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False np.random.seed(random_seed) random.seed(random_seed) torch.cuda.manual_seed(random_seed) torch.cuda.manual_seed_all(random_seed) # multi-GPU
tensorflow는 아래와 같이 설정해주면 된다.
해당 코드는 tensorflow >= 2.1 에서 사용 가능하다라고 한다.
import os import tensorflow as tf import numpy as np import random SEED = 42 os.environ['PYTHONHASHSEED'] = str(SEED) os.environ['TF_DETERMINISTIC_OPS'] = '1' tf.random.set_seed(SEED) np.random.seed(SEED) random.seed(SEED)
다른 것들도 중요하지만 제일 중요한건 **TF_DETERMINISTIC_OPS** 옵션이다.
해당 옵션을 빼고 했을 때, 학습 시작은 동일한데 가면 갈수록 성능이 달라지는 것을 확인하였다.
자세한 사항은 [해당 링크](https://github.com/NVIDIA/framework-determinism)에서 확인하면 될 것이다.