要想整個模型是確定性的,我們需要設定好隨機種子,這樣當程序運行到具有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設置作用就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。