我正在使用相同的种子运行脚本,我看到结果在连续运行时重现,但不知何故,使用相同的种子运行相同的脚本几天后输出发生了变化。我只得到了一个很奇怪的短期可重复性。为了可重复性,我的脚本已经包含以下语句:
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
torch.use_deterministic_algorithms(True)
random.seed(args.seed)
np.random.seed(args.seed)
torch.manual_seed(args.seed)
我还检查了由 RandomSampler 创建的实例 ID 序列,用于跨运行维护的训练数据加载器。还要在数据加载器中设置 num_workers=0。可能导致输出发生变化的原因是什么?
最佳答案
PyTorch 实际上并不是完全确定性的。这意味着,如果有足够的时间,使用设置的种子,一些 PyTorch 操作将简单地表现不同并与以前的运行不同。这是由于算法、CUDA 和反向传播优化。
这是一本好书:https://pytorch.org/docs/stable/notes/randomness.html
上面的页面列出了哪些操作是不确定的。通常不鼓励您禁用它们,但可以通过以下方式实现:
torch.use_deterministic_algorithms()
这也可能会禁用可以使用的操作。
关于python - PyTorch 的可重复性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71600683/