欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談PyTorch的可重復(fù)性問題(如何使實驗結(jié)果可復(fù)現(xiàn))

 更新時間:2020年02月20日 16:35:01   作者:hyk_1996  
今天小編就為大家分享一篇淺談PyTorch的可重復(fù)性問題(如何使實驗結(jié)果可復(fù)現(xiàn)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

由于在模型訓練的過程中存在大量的隨機操作,使得對于同一份代碼,重復(fù)運行后得到的結(jié)果不一致。因此,為了得到可重復(fù)的實驗結(jié)果,我們需要對隨機數(shù)生成器設(shè)置一個固定的種子。

許多博客都有介紹如何解決這個問題,但是很多都不夠全面,往往不能保證結(jié)果精確一致。我經(jīng)過許多調(diào)研和實驗,總結(jié)了以下方法,記錄下來。

全部設(shè)置可以分為三部分:

1. CUDNN

cudnn中對卷積操作進行了優(yōu)化,犧牲了精度來換取計算效率。如果需要保證可重復(fù)性,可以使用如下設(shè)置:

from torch.backends import cudnn
cudnn.benchmark = False      # if benchmark=True, deterministic will be False
cudnn.deterministic = True

不過實際上這個設(shè)置對精度影響不大,僅僅是小數(shù)點后幾位的差別。所以如果不是對精度要求極高,其實不太建議修改,因為會使計算效率降低。

2. Pytorch

torch.manual_seed(seed)      # 為CPU設(shè)置隨機種子
torch.cuda.manual_seed(seed)    # 為當前GPU設(shè)置隨機種子
torch.cuda.manual_seed_all(seed)  # 為所有GPU設(shè)置隨機種子

3. Python & Numpy

如果讀取數(shù)據(jù)的過程采用了隨機預(yù)處理(如RandomCrop、RandomHorizontalFlip等),那么對python、numpy的隨機數(shù)生成器也需要設(shè)置種子。

import random
import numpy as np
random.seed(seed)
np.random.seed(seed)

最后,關(guān)于dataloader:

注意,如果dataloader采用了多線程(num_workers > 1), 那么由于讀取數(shù)據(jù)的順序不同,最終運行結(jié)果也會有差異。也就是說,改變num_workers參數(shù),也會對實驗結(jié)果產(chǎn)生影響。目前暫時沒有發(fā)現(xiàn)解決這個問題的方法,但是只要固定num_workers數(shù)目(線程數(shù))不變,基本上也能夠重復(fù)實驗結(jié)果。

對于不同線程的隨機數(shù)種子設(shè)置,主要通過DataLoader的worker_init_fn參數(shù)來實現(xiàn)。默認情況下使用線程ID作為隨機數(shù)種子。如果需要自己設(shè)定,可以參考以下代碼:

GLOBAL_SEED = 1
 
def set_seed(seed):
  random.seed(seed)
  np.random.seed(seed)
  torch.manual_seed(seed)
  torch.cuda.manual_seed(seed)
  torch.cuda.manual_seed_all(seed)
 
GLOBAL_WORKER_ID = None
def worker_init_fn(worker_id):
  global GLOBAL_WORKER_ID
  GLOBAL_WORKER_ID = worker_id
  set_seed(GLOBAL_SEED + worker_id)
 
dataloader = DataLoader(dataset, batch_size=16, shuffle=True, num_workers=2, worker_init_fn=worker_init_fn)

以上這篇淺談PyTorch的可重復(fù)性問題(如何使實驗結(jié)果可復(fù)現(xiàn))就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 裝飾器的使用示例

    python 裝飾器的使用示例

    這篇文章主要介紹了python 裝飾器的使用示例,幫助大家更好的理解和使用python裝飾器,感興趣的朋友可以了解下
    2020-10-10
  • 利用python繪制蜂群圖的示例代碼

    利用python繪制蜂群圖的示例代碼

    蜂群圖可以不重疊的顯示各數(shù)據(jù)點的分布,相對于散點圖,所繪制的點彼此靠近且不會重疊,能有效呈現(xiàn)出點分布的局部密度信息,本文給大家介紹了如何利用python繪制蜂群圖,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • Python利用BeautifulSoup解析網(wǎng)頁內(nèi)容

    Python利用BeautifulSoup解析網(wǎng)頁內(nèi)容

    當今信息爆炸的時代,網(wǎng)絡(luò)上充斥著海量的數(shù)據(jù),而網(wǎng)絡(luò)爬蟲作為一種數(shù)據(jù)采集工具,扮演著至關(guān)重要的角色,BeautifulSoup 是一個Python庫,它可以從HTML或XML文件中提取數(shù)據(jù),本文介紹了Python如何利用BeautifulSoup解析網(wǎng)頁內(nèi)容,需要的朋友可以參考下
    2024-06-06
  • Python word2vec訓練詞向量實例分析講解

    Python word2vec訓練詞向量實例分析講解

    這篇文章主要介紹了Python word2vec訓練詞向量實例分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • Python中type()函數(shù)的具體使用

    Python中type()函數(shù)的具體使用

    在Python中,type()函數(shù)是一個非常有用的工具,它可以查看變量或?qū)ο蟮臄?shù)據(jù)類型,本文主要介紹了Python中type()函數(shù)的具體使用,感興趣的可以一起來了解一下
    2024-01-01
  • Pandas實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的一些小技巧匯總

    Pandas實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的一些小技巧匯總

    這篇文章主要給大家匯總介紹了關(guān)于Pandas實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的一些小技巧,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-05-05
  • Tensorflow的可視化工具Tensorboard的初步使用詳解

    Tensorflow的可視化工具Tensorboard的初步使用詳解

    這篇文章主要介紹了Tensorflow的可視化工具Tensorboard的初步使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 詳解pandas.DataFrame.plot() 畫圖函數(shù)

    詳解pandas.DataFrame.plot() 畫圖函數(shù)

    這篇文章主要介紹了詳解pandas.DataFrame.plot()畫圖函數(shù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • 已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式)

    已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式)

    這篇文章主要介紹了已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • windows下安裝Python的XlsxWriter模塊方法

    windows下安裝Python的XlsxWriter模塊方法

    今天小編就為大家分享一篇windows下安裝Python的XlsxWriter模塊方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評論