경진대회나 공모전에 나가서 수상하게 되면 본인의 코드를 재현성 서버에 올리고 재현성 검사 및 검증을 받게 되는데, 본인의 점수를 그래도 재현하기 위해서는 기존에 항상 Seed 를 고정해두어야 한다. 고정하지 않으면 매번 결과가 달라질테니까... 경진대회에서는 0.01점도 소중합니다...
따라서 항상 맨 먼저 작성하는 습관을 가집시다!
아래는 제가 항상 고정으로 사용하는, 정말 copy and paste만 하면 되는 코드를 공유합니다.
참고로 Jupyter Notebook으로 코드를 작성한 경우, train을 시작하기 전에 다시 seed를 고정해줘야 한다. 혹은, 런타임 초기화 후에 다시 처음부터 실행하자. 아니면 계속 고정된 seed 내에서 반복되면서 다른 값이 나온다.
import torch
import numpy as np
import random
import os
def my_seed_everywhere(seed: int = 42):
random.seed(seed) # random
np.random.seed(seed) # numpy
os.environ["PYTHONHASHSEED"] = str(seed) # os
# pytorch
torch.manual_seed(seed)
torch.cuda.manual_seed(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
my_seed = 42
my_seed_everywhere(my_seed)
import tensorflow as tf
import numpy as np
import random
import os
def my_seed_everywhere(seed: int = 42):
random.seed(seed) # random
np.random.seed(seed) # np
os.environ["PYTHONHASHSEED"] = str(seed) # os
tf.random.set_seed(seed) # tensorflow
my_seed = 42
my_seed_everywhere(my_seed)