为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,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


 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐