簡述python pytorch 隨機種子的實現

2022-10-06 04:12:09 字數 1316 閱讀 7196

隨機數廣泛應用在科學研究, 但是計算機無法產生真正的隨機數, 一般成為偽隨機數. 它的產生過程: 給定乙個隨機種子(乙個正整數), 根據隨機演算法和種子產生隨機序列. 給定相同程式設計客棧的隨機種子, 計算機產生的隨機數列是一樣的(這也許是偽隨機的原因).

隨機種子是什麼?

隨機種子是針對隨機方法而言的。

隨機方法:常見的隨機方法有 生成隨機數,以www.cppcns.com及其他的像 隨機排序 之類的,後者本質上也是基於生成隨機數來實現的。在深度學習中,比較常用的隨機方法的應用有:網路的隨機初始化,訓練集的隨機打亂等。

隨機種子的取值範圍?

可以是任意數字,如10,1000

python random

下面以python的random函式為例, 做了乙個測試.

當使用者未指定隨機種子, 系統預設隨機生成, 一般與系統當前時間有關.使用者指定隨機種子後, 使用隨機函式產生的隨機數可以復現.種子確定後, 每次使用隨機函式相當於從隨機序列去獲取隨機數, 每次獲取的隨機數是不同的.

pytorch

使用pytorch復現效果時, 總是無法做到完全的復現. 同乙份**執行兩次, 有時結果差異很大. 這是由於演算法中的隨機性導致的. 要想每次獲得的結果一致, 必須固定住隨機種子. 首先, 我們需要找到演算法在**使用了隨機性, 再相應的固定住隨機種子.

def sdfpzeoeed_torch():

seed = 1024 # 使用者設定

# seed = int(time.time()*256)

# 儲存隨機種子

with open('seed.txt', 'w') as f:

f.write(str(seed))

random.seed(seed)

os.environ['pythonhashseed'] = str(seed)

np.random.seed(seed)

torch.manual_seed(seed)

torch.cuda.manual_seed(seed)

torch.cuda.manual_seed_all(seed)

torch.backends.cudnn.benchmark = false

torch.backends.cudnn.deterministic = true

seed_torch()

上面的**固定了pytorch常用的隨機種子, 但是如果你在預處理中涉及了隨機性, 也需要固定住.

為了復現結果, 我們固定住了隨機種子. 但pytorch訓練模型時, 不同的隨機種子會產生不同的結果. 每次使用固定的隨機種子, 可能錯失好的結果. 為此, 我們可以每次使用不一樣的隨機種子, 並儲存下來

Python Pytorch深度學習之自動微分

目錄 antograd包是pytorch中所有神經網路的核心。autograd為tensor上的所有操作提供自動微分,它是乙個由執行定義的框架,這意味著以 執行方式定義後向傳播,並且每一次迭代都可能不同 torch.tensor是包的核心。1.如果將屬性.requires grad設定為true,則...

簡述mysql應用 MYSQL使用簡述

您可能感興趣的話題 mssql 一 連線mysql。1 例1 連線到本機上的mysql。首先在開啟dos視窗,然後進入目錄 mysqlbin,再鍵入命令mysql uroot p,回車後提示你輸密碼,如果剛安裝好mysql,超級使用者root是沒有密碼的,故直接回車即可進入到mysql中了,mysq...

PerformanceCounter簡述及用法

一 performancecounter簡述 1 簡單介紹 表示 windows nt 效能計數器元件 命名空間 system.diagnostics 程式集 system 在 system.dll 中 2 建構函式 只介紹本文要用到的 performancecounter string,strin...