此處討論的隨機種子適用於random模組,numpy, torch等。我們將以random模組為例。
python中的隨機數其實是所謂的「偽隨機數」,它的生成並不是完全無跡可尋的。偽隨機數生成器通過對「某個值」執行系列操作來獲得偽隨機值。 通常,這「某個值」來自上乙個隨機數生成器生成的值。 但是,當你新開啟乙個程式時,沒有由上乙個偽隨機數生成器產生的值,這時系統就會為你定乙個初始值(可能根據日期,時間啥的,可以認為是無法被推斷的),通過這個值你可以一路往下走。
當我們從上圖可以看到,值1是由當時的系統環境決定的,那我們是否能控制值1呢?答案是肯定的。
我們可以通過random.seed()這個函式來給值1設定乙個值,使得它成為接下來所有值的」種子」
當我在windows系統以9001為種子時,多次執行某個偽隨機生成器(random.randint),會得到這樣乙個序列(1, 5, 5,2,10)。
當我在linux系統以9001為種子時,多次執行某個偽隨機生成器(random.randint),會得到這樣乙個序列(1, 5, 5,2,10)。
通過這個例子我們可以發現
1. 在定下值1(也就是隨機種子)後,整個隨機序列就已經確定了下來。這就是所謂的「偽」。
2. 請注意上述例子中第五個和第六個偽隨機數生成器(random.randint),他們接收的「某個值」都是5,但生成的數卻不一樣(乙個是5,乙個是2)。這就是所謂的「隨機」
假象這樣一種情況,我們對擁有隨機操作的兩個程式完成了a和b兩個版本,那如果我們要比較a和b效能的時候,由於程式內部的隨機性,我們的直接比較是很難說明問題的。
那如果我們給a,b在程式的開始都設定同乙個隨機種子,那麼比較將很容易進行,又保證了內部的隨機操作。
這只是乙個例子,總的來說,設定隨機種子讓我們的對比和復現十分直觀。
import random, torch
import numpy as np
seed = 9001
random.seed(seed)
torch.manual_seed(seed) #cpu
torch.cuda.manual_seed(seed) #gpu
np.random.seed(seed)
Others 隨機種子
首先,我們來看一段 猜數字小遊戲 include include const int left 1 const int right 100 void guessnumber else if answer target else intmain 我們執行程式,效果如下 我們關掉程式,清理解決方案,然後...
隨機種子講解
在使用numpy時,難免會用到隨機數生成器。我一直對np.random.seed 隨機數種子搞不懂。很多部落格也就粗略的說,利用隨機數種子,每次生成的隨機數相同。我有兩個疑惑 1,利用隨機數種子,每次生成的隨機數相同。這是什麼意思?2,隨機數種子的引數怎麼選擇?在別人的 中經常看到np.random...
怎樣理解隨機種子
在使用numpy時,難免會用到隨機數生成器。我一直對np.random.seed 隨機數種子搞不懂。很多部落格也就粗略的說,利用隨機數種子,每次生成的隨機數相同。我有兩個疑惑 1,利用隨機數種子,每次生成的隨機數相同。這是什麼意思?2,隨機數種子的引數怎麼選擇?在別人的 中經常看到np.random...