日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

PyTorch中torch.manual_seed()的用法實例詳解_python

作者:想變厲害的大白菜 ? 更新時間: 2022-08-04 編程語言

一、torch.manual_seed(seed) 介紹

torch.manual_seed(seed) 功能描述

設(shè)置 CPU 生成隨機數(shù)的 種子 ,方便下次復(fù)現(xiàn)實驗結(jié)果。

為 CPU 設(shè)置 種子 用于生成隨機數(shù),以使得結(jié)果是確定的。

當(dāng)你設(shè)置一個隨機種子時,接下來的隨機算法生成數(shù)根據(jù)當(dāng)前的隨機種子按照一定規(guī)律生成。
隨機種子作用域是在設(shè)置時到下一次設(shè)置時。要想重復(fù)實驗結(jié)果,設(shè)置同樣隨機種子即可。

語法

torch.manual_seed(seed) → torch._C.Generator

參數(shù)

seed,int類型,是種子 – CPU生成隨機數(shù)的種子。取值范圍為 [-0x8000000000000000, 0xffffffffffffffff] ,十進制是 [-9223372036854775808, 18446744073709551615] ,超出該范圍將觸發(fā) RuntimeError 報錯。

返回

返回一個torch.Generator對象。

二、類似函數(shù)的功能

為CPU中設(shè)置種子,生成隨機數(shù):

torch.manual_seed(number)

為特定GPU設(shè)置種子,生成隨機數(shù):

torch.cuda.manual_seed(number)

為所有GPU設(shè)置種子,生成隨機數(shù):

# 如果使用多個GPU,應(yīng)該使用torch.cuda.manual_seed_all()為所有的GPU設(shè)置種子。
torch.cuda.manual_seed_all(number)

使用原因 :

在需要生成隨機數(shù)據(jù)的實驗中,每次實驗都需要生成數(shù)據(jù)。設(shè)置隨機種子是為了確保每次生成固定的隨機數(shù),這就使得每次實驗結(jié)果顯示一致了,有利于實驗的比較和改進。使得每次運行該 .py 文件時生成的隨機數(shù)相同。

三、實例

實例 1 :不設(shè)隨機種子,生成隨機數(shù)

# test.py
import torch
print(torch.rand(1)) # 返回一個張量,包含了從區(qū)間[0, 1)的均勻分布中抽取的一組隨機數(shù)

每次運行test.py的輸出結(jié)果都不相同:

tensor([0.4351])

tensor([0.3651])

tensor([0.7465])

實例 2 :設(shè)置隨機種子,使得每次運行代碼生成的隨機數(shù)都一樣

# test.py
import torch
# 設(shè)置隨機種子
torch.manual_seed(0)
# 生成隨機數(shù)
print(torch.rand(1)) # 返回一個張量,包含了從區(qū)間[0, 1)的均勻分布中抽取的一組隨機數(shù)

每次運行 test.py 的輸出結(jié)果都是一樣:

tensor([0.4963])

實例 3 :不同的隨機種子生成不同的值

改變隨機種子的值,設(shè)為 1 :

# test.py
import torch
torch.manual_seed(1)
print(torch.rand(1)) # 返回一個張量,包含了從區(qū)間[0, 1)的均勻分布中抽取的一組隨機數(shù)

每次運行 test.py,輸出結(jié)果都是:

tensor([0.7576])

改變隨機種子的值,設(shè)為 5 :

# test.py
import torch
torch.manual_seed(5)
print(torch.rand(1)) # 返回一個張量,包含了從區(qū)間[0, 1)的均勻分布中抽取的一組隨機數(shù)

每次運行 test.py,輸出結(jié)果都是:

tensor([0.8303])

可見不同的隨機種子能夠生成不同的隨機數(shù)。

但只要隨機種子一樣,每次運行代碼都會生成該種子下的隨機數(shù)。

實例 4 :設(shè)置隨機種子后,是每次運行test.py文件的輸出結(jié)果都一樣,而不是每次隨機函數(shù)生成的結(jié)果一樣
# test.py
import torch
torch.manual_seed(0)
print(torch.rand(1))
print(torch.rand(1))

輸出結(jié)果:

tensor([0.4963])
tensor([0.7682])

可以看到兩次打印 torch.rand(1) 函數(shù)生成的結(jié)果是不一樣的,但如果你再運行test.py,還是會打印:

tensor([0.4963])
tensor([0.7682])

實例 5 :如果你就是想要每次運行隨機函數(shù)生成的結(jié)果都一樣,那你可以在每個隨機函數(shù)前都設(shè)置一模一樣的隨機種子

# test.py
import torch
torch.manual_seed(0)
print(torch.rand(1))
torch.manual_seed(0)
print(torch.rand(1))

輸出結(jié)果:

tensor([0.4963])
tensor([0.4963])

參考鏈接

【pytorch】torch.manual_seed()用法詳解

總結(jié)

原文鏈接:https://blog.csdn.net/weixin_44211968/article/details/123769010

欄目分類
最近更新