W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
原文: https://pytorch.org/docs/stable/notes/randomness.html
在 PyTorch 發(fā)行版,單獨(dú)的提交或不同的平臺上,不能保證完全可重復(fù)的結(jié)果。 此外,即使在使用相同種子的情況下,結(jié)果也不必在 CPU 和 GPU 執(zhí)行之間再現(xiàn)。
但是,為了使計(jì)算能夠在一個特定平臺和 PyTorch 版本上確定特定問題,需要采取幾個步驟。
PyTorch 中涉及兩個偽隨機(jī)數(shù)生成器,您將需要手動對其進(jìn)行播種以使運(yùn)行可重復(fù)。 此外,您應(yīng)確保代碼所依賴的所有其他庫以及使用隨機(jī)數(shù)的庫也使用固定種子。
您可以使用 torch.manual_seed()
為所有設(shè)備(CPU 和 CUDA)播種 RNG:
import torch
torch.manual_seed(0)
有一些使用 CUDA 函數(shù)的 PyTorch 函數(shù)可能會導(dǎo)致不確定性。 此類 CUDA 函數(shù)的一類是原子運(yùn)算,尤其是atomicAdd
,其中不確定與相同值的并行加法順序,對于浮點(diǎn)變量,其結(jié)果是方差的來源。 向前使用atomicAdd
的 PyTorch 函數(shù)包括 torch.Tensor.index_add_()
,
torch.Tensor.scatter_add_()
, torch.bincount()
。
許多操作都向后使用atomicAdd
,特別是 torch.nn.functional.embedding_bag()
, torch.nn.functional.ctc_loss()
和許多形式的合并,填充和采樣。
當(dāng)前,沒有簡單的方法可以避免這些函數(shù)中的不確定性。
在 CuDNN 后端上運(yùn)行時(shí),必須設(shè)置另外兩個選項(xiàng):
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
警告
確定性模式可能會對性能產(chǎn)生影響,具體取決于您的模型。 這意味著,由于模型具有確定性,因此與模型不確定時(shí)相比,處理速度(即每秒處理的批次項(xiàng)目)可能會更低。
如果您或您正在使用的任何庫都依賴于 Numpy,則也應(yīng)為 Numpy RNG 設(shè)置種子。 這可以通過以下方式完成:
import numpy as np
np.random.seed(0)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: