为什么使用相同的网络结构,跑出来的效果完全不同,用的学习率,迭代次数,batch size 都是一样?
固定随机数种子是非常重要的。
但是如果你使用的是PyTorch等框架,还要看一下框架的种子是否固定了。还有,如果你用了cuda,别忘了cuda的随机数种子。这里还需要用到torch.backends.cudnn.deterministic和torch.backends.cudnn.benchmark确保调度的卷积算法一致
一、torch.backends.cudnn.deterministic是啥?
torch.backends.cudnn.deterministic=True每次返回的卷积算法将是确定的,即默认算法。
如果配合上设置 Torch 的随机种子为固定值的话,应该可以保证每次运行网络的时候相同输入的输出是固定的,代码大致这样
def init_seeds(seed=0):
torch.manual_seed(seed

本文探讨了在使用相同网络结构时,为何运行效果可能不同的原因,重点关注PyTorch框架中的随机数种子设定。通过设置`torch.backends.cudnn.deterministic=True`和`torch.backends.cudnn.benchmark=False`,可以提高结果的可复现性。同时,介绍了`torch.backends.cudnn.benchmark`的作用,它会在训练初期优化卷积算法以提高速度,但可能影响结果的重现性。确保随机种子固定是关键,包括PyTorch、CUDA以及numpy的种子设置。
最低0.47元/天 解锁文章
1万+





