Pytorch(6)-设置随机种子,复现模型结果
設置隨機種子,復現模型結果
- 1.Python本身的隨機因素
- 2.numpy隨機因素
- 3.pytorch隨機因素
在很多情況下,我們希望能夠復現實驗的結果。為了消除程序中隨機因素的影響,我們需要將隨機數的種子固定下來。將所有帶隨機因素的種子全部固定下來后,多次執行同一代碼將得到相同的結果。
在pytorch 模型運行時可能會涉及到三類隨機因素:Python本身的隨機因素,Numpy隨機因素,pytorch隨機因素。
沒法清楚的知道代碼涉及到那些隨機因素的情況時有發生,為了以防萬一,把所有可能的隨機因素都禁止掉比較保險。
def set_rand_seed(seed=1):print("Random Seed: ", seed)random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)# torch.backends.cudnn.enabled = False torch.backends.cudnn.benchmark = Falsetorch.backends.cudnn.deterministic = True # 保證每次返回得的卷積算法是確定的1.Python本身的隨機因素
random.seed(seed)
2.numpy隨機因素
np.random.seed(seed)
3.pytorch隨機因素
1.cpu隨機種子
torch.manual_seed(seed)
2.GPU隨機種子(with the latest pytorch 0.3 version you only need to set torch.manual_seed which will seed all devices)
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
3.cuDNN 是英偉達專門為深度神經網絡所開發出來的 GPU 加速庫,針對卷積、池化等等常見操作做了非常多的底層優化,比一般的 GPU 程序要快很多。在使用 GPU 的時候,PyTorch 會默認使用 cuDNN 加速。但是使用cuDNN 加速時,torch.backends.cudnn.benchmark 模式是為 False。
cuDNN 對網絡進行優化通過torch.backends.cudnn.benchmark 模式選擇不同版本的優化算法。但是這些優化算法有些是非確定性的,所以會導致結果的隨機性。所以需要orch.backends.cudnn.deterministic = True,選擇默認的優化方式,使得結果可以復現。
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
如果不是很清楚默認情況下的torch.backends.cudnn.benchmark值,還是顯式設置為 False 比較保險
demo1: 結果隨機
torch.backends.cudnn.benchmark = True
torch.backends.cudnn.deterministic = True
demo2:結果可復現
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
demo3: 直接禁用cudnn,結果可復現
torch.backends.cudnn.enabled = False
4.數據導入num_workers = 0
def _init_fn():np.random.seed(manualSeed)DataLoding = data.DataLoader(..., batch_size = ..., collate_fn = ..., num_workers =0shuffle = ..., pin_memory = ...,worker_init_fn=np.random.seed(1)參考博文:
Random seed initialization:https://discuss.pytorch.org/t/random-seed-initialization/7854/17
torch.backends.cudnn.benchmark ?!:https://zhuanlan.zhihu.com/p/73711222
pytorch torch.backends.cudnn設置作用:
https://www.cnblogs.com/wanghui-garcia/p/11514502.html
總結
以上是生活随笔為你收集整理的Pytorch(6)-设置随机种子,复现模型结果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指offer_02
- 下一篇: Pytorch(1)-内置/自己设计的损