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

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

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

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

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

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

1. CUDNN

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

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

不過實(shí)際上這個(gè)設(shè)置對(duì)精度影響不大,僅僅是小數(shù)點(diǎn)后幾位的差別。所以如果不是對(duì)精度要求極高,其實(shí)不太建議修改,因?yàn)闀?huì)使計(jì)算效率降低。

2. Pytorch

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

3. Python & Numpy

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

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

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

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

對(duì)于不同線程的隨機(jī)數(shù)種子設(shè)置,主要通過DataLoader的worker_init_fn參數(shù)來實(shí)現(xiàn)。默認(rèn)情況下使用線程ID作為隨機(jī)數(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ù)性問題(如何使實(shí)驗(yàn)結(jié)果可復(fù)現(xiàn))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python 裝飾器的使用示例

    python 裝飾器的使用示例

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

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

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

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

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

    Python word2vec訓(xùn)練詞向量實(shí)例分析講解

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

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

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

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

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

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

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

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

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

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

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

    windows下安裝Python的XlsxWriter模塊方法

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

最新評(píng)論