为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,batch size 都是一样?固定随机数种子是非常重要的。
三重随机种子:机器的随机种子,PyTorch随机种子,cuda随机种子。
如果你使用的是PyTorch等框架,还要看一下框架的种子是否固定了;
如果你用了cuda,别忘了cuda的随机数种子。这里还需要用torch.backends.cudnn.deterministic.
mmsegmentation/train.py at master · open-mmlab/mmsegmentation · GitHub
def set_random_seed(seed, deterministic=False):
"""Set random seed.
Args:
seed (int): Seed to be used.
deterministic (bool): Whether to set the deterministic option for
CUDNN backend, i.e., set `torch.backends.cudnn.deterministic`
to True and `torch.backends.cudnn.benchmark` to False.
Default: False.
"""
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