日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch(6)-设置随机种子,复现模型结果

發布時間:2023/12/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)-设置随机种子,复现模型结果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。