python - PyTorch 的可重复性问题

标签 python nlp pytorch seed

我正在使用相同的种子运行脚本,我看到结果在连续运行时重现,但不知何故,使用相同的种子运行相同的脚本几天后输出发生了变化。我只得到了一个很奇怪的短期可重复性。为了可重复性,我的脚本已经包含以下语句:

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/

相关文章:

python - gensim 为 tf-idf 模型创建字典时是否使用词干提取?

python - 用于 POS 标记和 Lemmatizer 的多语言 NLTK

python - 用函数变换集合的高效算法

python - 我尝试求解非线性方程时出错

python - 在 NLTK 中使用 block 标签(而非 NER)在句子中创建关系 |自然语言处理

python - 了解 Pytorch 中简单神经网络的参数

python - torch.transforms.normalize 中的数字是什么以及如何选择它们?

python - 将张量移动到 cuda 设备会导致 Pytorch 中的非法内存访问

python - 是否可以将Visual Studio混合模式调试附加到Jupyter笔记本上以同时调试C++和Python?

python - 为搜索/检索编制索引/存储代码(脚本、查询)的最佳、最有效的方法是什么?