Pytorch固定隨機數(shù)種子的方法小結(jié)
引言
在對神經(jīng)網(wǎng)絡(luò)模型進行訓(xùn)練時,有時候會存在對訓(xùn)練過程進行復(fù)現(xiàn)的需求。然而,每次運行時 Pytorch、Numpy 中的隨機性將使得該目的變得困難重重。在程序運行前固定所有隨機數(shù)的種子有望解決這一問題。基于此,本文記錄了 Pytorch 中的固定隨機數(shù)種子的方法。
在使用 Pytorch 對模型進行訓(xùn)練時,通常涉及到隨機數(shù)的模塊包括:Python、Pytorch、Numpy、Cudnn。因此,在開始訓(xùn)練前,需要針對這些涉及隨機數(shù)的模塊進行隨機數(shù)種子的固定。
1. Python
Python 本身涉及到的隨機性主要是 Python 自帶的 random 庫隨機化和 Hash 隨機化問題,需要通過 os 庫對其進行限制:
import os, random random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed)
2. Numpy
在使用 Numpy 庫取隨機數(shù)時,需要對其隨機數(shù)種子進行限制:
import numpy as np np.random.seed(seed)
3. Pytorch
當 Pytorch 使用 CPU 進行運算時,需要設(shè)定 CPU 支撐下的 Pytorch 隨機數(shù)種子:
import torch torch.manual_seed(seed)
當 Pytorch 使用 GPU 進行運算時,需要設(shè)定 GPU 支撐下的 Pytorch 隨機數(shù)種子:
import torch torch.cuda.manual_seed(seed) torch.cuda.manual_seed_all(seed) # 使用多 GPU 時使用
需要特別注意的是:目前很多博客和知乎回答提出 torch.cuda.manual_seed(seed) 和 torch.cuda.manual_seed_all(seed) 具有相同的作用。這個結(jié)論需要注意 Pytorch 版本。在筆者所用的 Pytorch 2.1 版本下,這兩個函數(shù)的作用完全不同。參考官方文檔:torch.cuda.manual_seed 和 torch.cuda.manual_seed_all(seed)
當 Pytorch 使用 Cudnn 進行加速運算時,還需要限制 Cudnn 在加速過程中涉及到的隨機策略:
import torch torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False
總結(jié)
基于上述庫的固定隨機數(shù)方法總結(jié)為:
def set_random_seed(seed: int) -> None: random.seed(seed) os.environ['PYTHONHASHSEED'] = str(seed) np.random.seed(seed) torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) torch.backends.cudnn.benchmark = False torch.backends.cudnn.deterministic = True seed = 114514 set_torch_seed(seed)
如果在實踐中還調(diào)用了其他涉及隨機性的第三方庫,則需要根據(jù)上述思路對該固定隨機數(shù)方法進行動態(tài)補充。
以上就是Pytorch固定隨機數(shù)種子的方法小結(jié)的詳細內(nèi)容,更多關(guān)于Pytorch固定隨機數(shù)種子的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何使用python的ctypes調(diào)用醫(yī)保中心的dll動態(tài)庫下載醫(yī)保中心的賬單
這篇文章主要介紹了如何使用python的ctypes調(diào)用醫(yī)保中心的dll動態(tài)庫下載醫(yī)保中心的賬單,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
python3使用pandas獲取股票數(shù)據(jù)的方法
今天小編就為大家分享一篇python3使用pandas獲取股票數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
修改默認的pip版本為對應(yīng)python2.7的方法
今天小編就為大家分享一篇修改默認的pip版本為對應(yīng)python2.7的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11

