溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PyTorch中torch.manual_seed()如何使用

發(fā)布時(shí)間:2022-06-13 10:07:16 來源:億速云 閱讀:202 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“PyTorch中torch.manual_seed()如何使用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“PyTorch中torch.manual_seed()如何使用”文章能幫助大家解決問題。

    一、torch.manual_seed(seed) 介紹

    torch.manual_seed(seed) 功能描述

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

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

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

    語法

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

    參數(shù)

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

    返回

    返回一個(gè)torch.Generator對(duì)象。

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

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

    torch.manual_seed(number)

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

    torch.cuda.manual_seed(number)

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

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

    使用原因 :

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

    三、實(shí)例

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

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

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

    tensor([0.4351])

    tensor([0.3651])

    tensor([0.7465])

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

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

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

    tensor([0.4963])

    實(shí)例 3 :不同的隨機(jī)種子生成不同的值

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

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

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

    tensor([0.7576])

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

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

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

    tensor([0.8303])

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

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

    實(shí)例 4 :設(shè)置隨機(jī)種子后,是每次運(yùn)行test.py文件的輸出結(jié)果都一樣,而不是每次隨機(jī)函數(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é)果是不一樣的,但如果你再運(yùn)行test.py,還是會(huì)打?。?/p>

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

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

    # 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])

    關(guān)于“PyTorch中torch.manual_seed()如何使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI