您好,登錄后才能下訂單哦!
這篇文章主要介紹“PyTorch中torch.manual_seed()如何使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“PyTorch中torch.manual_seed()如何使用”文章能幫助大家解決問題。
設置 CPU 生成隨機數的 種子 ,方便下次復現實驗結果。
為 CPU 設置 種子 用于生成隨機數,以使得結果是確定的。
當你設置一個隨機種子時,接下來的隨機算法生成數根據當前的隨機種子按照一定規律生成。
隨機種子作用域是在設置時到下一次設置時。要想重復實驗結果,設置同樣隨機種子即可。
torch.manual_seed(seed) → torch._C.Generator
seed,int類型,是種子 – CPU生成隨機數的種子。取值范圍為 [-0x8000000000000000, 0xffffffffffffffff] ,十進制是 [-9223372036854775808, 18446744073709551615] ,超出該范圍將觸發 RuntimeError 報錯。
返回一個torch.Generator對象。
為CPU中設置種子,生成隨機數:
torch.manual_seed(number)
為特定GPU設置種子,生成隨機數:
torch.cuda.manual_seed(number)
為所有GPU設置種子,生成隨機數:
# 如果使用多個GPU,應該使用torch.cuda.manual_seed_all()為所有的GPU設置種子。 torch.cuda.manual_seed_all(number)
使用原因 :
在需要生成隨機數據的實驗中,每次實驗都需要生成數據。設置隨機種子是為了確保每次生成固定的隨機數,這就使得每次實驗結果顯示一致了,有利于實驗的比較和改進。使得每次運行該 .py 文件時生成的隨機數相同。
# test.py import torch print(torch.rand(1)) # 返回一個張量,包含了從區間[0, 1)的均勻分布中抽取的一組隨機數
每次運行test.py的輸出結果都不相同:
tensor([0.4351])
tensor([0.3651])
tensor([0.7465])
# test.py import torch # 設置隨機種子 torch.manual_seed(0) # 生成隨機數 print(torch.rand(1)) # 返回一個張量,包含了從區間[0, 1)的均勻分布中抽取的一組隨機數
每次運行 test.py 的輸出結果都是一樣:
tensor([0.4963])
改變隨機種子的值,設為 1 :
# test.py import torch torch.manual_seed(1) print(torch.rand(1)) # 返回一個張量,包含了從區間[0, 1)的均勻分布中抽取的一組隨機數
每次運行 test.py,輸出結果都是:
tensor([0.7576])
改變隨機種子的值,設為 5 :
# test.py import torch torch.manual_seed(5) print(torch.rand(1)) # 返回一個張量,包含了從區間[0, 1)的均勻分布中抽取的一組隨機數
每次運行 test.py,輸出結果都是:
tensor([0.8303])
可見不同的隨機種子能夠生成不同的隨機數。
但只要隨機種子一樣,每次運行代碼都會生成該種子下的隨機數。
實例 4 :設置隨機種子后,是每次運行test.py文件的輸出結果都一樣,而不是每次隨機函數生成的結果一樣 # test.py import torch torch.manual_seed(0) print(torch.rand(1)) print(torch.rand(1))
輸出結果:
tensor([0.4963])
tensor([0.7682])
可以看到兩次打印 torch.rand(1) 函數生成的結果是不一樣的,但如果你再運行test.py,還是會打印:
tensor([0.4963])
tensor([0.7682])
實例 5 :如果你就是想要每次運行隨機函數生成的結果都一樣,那你可以在每個隨機函數前都設置一模一樣的隨機種子
# test.py import torch torch.manual_seed(0) print(torch.rand(1)) torch.manual_seed(0) print(torch.rand(1))
輸出結果:
tensor([0.4963])
tensor([0.4963])
關于“PyTorch中torch.manual_seed()如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。