Deterministic Pytorch: pytorch如何保證可重複性

 

       要想整個模型是確定性的,我們需要設定好隨機種子,這樣當程序運行到具有random的模塊時,由於僞隨機的種子是相同的,那麼隨機得到的結果也是相同的。需要設定的隨機種子如下。

def set_seed(self, seed=0):
    random.seed(seed)
    np.random.seed(seed)
    torch.manual_seed(seed) #爲CPU設置種子用於生成隨機數,以使得結果是確定的
    torch.cuda.manual_seed(seed) #爲當前GPU設置隨機種子;
    torch.cuda.manual_seed_all(seed) #如果使用多個GPU,爲所有的GPU設置種子。
    torch.backends.cudnn.deterministic = True # CPU和GPU結果一致
    torch.backends.cudnn.benchmark = False

cuDNN使用非確定性算法,並且可以使用torch.backends.cudnn.enabled = False來進行禁用

如果設置爲torch.backends.cudnn.enabled =True,說明設置爲使用使用非確定性算法

然後再設置:

torch.backends.cudnn.benchmark = true

那麼cuDNN使用的非確定性算法就會自動尋找最適合當前配置的高效算法,來達到優化運行效率的問題

一般來講,應該遵循以下準則:

如果網絡的輸入數據維度或類型上變化不大,設置  torch.backends.cudnn.benchmark = true  可以增加運行效率;

如果網絡的輸入數據在每次 iteration 都變化的話,會導致 cnDNN 每次都會去尋找一遍最優配置,這樣反而會降低運行效率。

所以我們經常看見在代碼開始出兩者同時設置:

torch.backends.cudnn.enabled = True
torch.backends.cudnn.benchmark = True

以上這篇淺談pytorch torch.backends.cudnn設置作用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章