东营网站建设课程定位优化,内网穿透软件哪个好,销售网站制作怎么做,微信app原文链接#xff1a;https://zhuanlan.zhihu.com/p/141063432
为什么使用相同的网络结构#xff0c;跑出来的效果完全不同#xff0c;用的学习率#xff0c;迭代次数#xff0c;batch size 都是一样#xff1f;固定随机数种子是非常重要的。但是如果你使用的是PyTorch等…原文链接https://zhuanlan.zhihu.com/p/141063432
为什么使用相同的网络结构跑出来的效果完全不同用的学习率迭代次数batch size 都是一样固定随机数种子是非常重要的。但是如果你使用的是PyTorch等框架还要看一下框架的种子是否固定了。还有如果你用了cuda别忘了cuda的随机数种子。这里还需要用到torch.backends.cudnn.deterministic.
benchmark 设置False是为了保证不使用选择卷积算法的机制使用固定的卷积算法。但是就算是固定的卷积算法由于其实现不同也可能是不可控制的即相同的值同一个算法卷积出来有细微差别deterministic设置True保证使用确定性的卷积算法二者配合起来才能保证卷积操作的一致性
因此将torch.backends.cudnn.deterministic这个 flag 置为True的话每次返回的卷积算法将是确定的即默认算法。如果配合上设置 Torch 的随机种子为固定值的话应该可以保证每次运行网络的时候相同输入的输出是固定的代码大致这样
def seed_everything(seed1029):设置整个开发环境的seed:param seed::param device::return:random.seed(seed)os.environ[PYTHONHASHSEED] str(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)# some cudnn methods can be random even after fixing the seed# unless you tell it to be deterministictorch.backends.cudnn.deterministic True#如果torch.backends.cudnn.benchmark False那么模型的表现可能不是最优的但reproducibility是比较强的torch.backends.cudnn.benchmark False