最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

由于在模型訓(xù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)    # 為當(dāng)前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代碼的常用方法小結(jié)

    打包Python代碼的常用方法小結(jié)

    Python是一門強大的編程語言,但在將Python代碼分享給其他人時,讓他們安裝Python解釋器并運行腳本可能有點繁瑣,這時,將Python代碼打包成可執(zhí)行的應(yīng)用程序(.exe)可以大大簡化這個過程,本文將介紹幾種常用的方法,輕松地將Python代碼變成獨立的可執(zhí)行文件
    2023-11-11
  • Python中ini配置文件的寫入與讀取的操作示例

    Python中ini配置文件的寫入與讀取的操作示例

    本文詳細介紹了如何在Python中使用configparser模塊進行INI文件的讀寫操作,包括基本用法、高級用法以及創(chuàng)建、讀取和管理配置文件的實例演示,需要的朋友可以參考下
    2025-03-03
  • 詳解使用Selenium爬取豆瓣電影前100的愛情片相關(guān)信息

    詳解使用Selenium爬取豆瓣電影前100的愛情片相關(guān)信息

    這篇文章主要介紹了詳解使用Selenium爬取豆瓣電影前100的愛情片相關(guān)信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python迭代器iterator生成器generator使用解析

    Python迭代器iterator生成器generator使用解析

    這篇文章主要介紹了Python迭代器iterator生成器generator使用解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • IronPython連接MySQL的方法步驟

    IronPython連接MySQL的方法步驟

    這篇文章主要介紹了IronPython連接MySQL的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Python實現(xiàn)把多維數(shù)組展開成DataFrame

    Python實現(xiàn)把多維數(shù)組展開成DataFrame

    今天小編就為大家分享一篇Python實現(xiàn)把多維數(shù)組展開成DataFrame,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中optparser庫用法實例詳解

    Python中optparser庫用法實例詳解

    這篇文章主要介紹了Python中optparser庫用法實例詳解,介紹了optparser的引入,初始化等相關(guān)內(nèi)容,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python elasticsearch從創(chuàng)建索引到寫入數(shù)據(jù)的全過程

    python elasticsearch從創(chuàng)建索引到寫入數(shù)據(jù)的全過程

    這篇文章主要介紹了python elasticsearch從創(chuàng)建索引到寫入數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python列表中常見的一些排序方法

    python列表中常見的一些排序方法

    在Python實際開發(fā)中會經(jīng)常需要用到對列表進行排序,下面這篇文章主要給大家介紹了關(guān)于python列表中常見的一些排序方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Python實現(xiàn)的Kmeans++算法實例

    Python實現(xiàn)的Kmeans++算法實例

    這篇文章主要介紹了Kmeans和kmeans++算法,講解了Kmeans算法的缺點和kmeans++算法的實現(xiàn)思路,以及Python和matlab中實現(xiàn)的Kmeans++算法,需要的朋友可以參考下
    2014-04-04

最新評論

邻水| 台东县| 昌吉市| 诸城市| 额尔古纳市| 石阡县| 庐江县| 乌海市| 甘谷县| 广州市| 安义县| 凤山市| 安溪县| 两当县| 海门市| 汨罗市| 平山县| 新野县| 调兵山市| 杭锦后旗| 万宁市| 合作市| 昌吉市| 南昌县| 茶陵县| 富蕴县| 台湾省| 石林| 密云县| 湘阴县| 连平县| 兰坪| 麻阳| 长泰县| 婺源县| 孟津县| 汶川县| 灵山县| 丹寨县| 两当县| 罗平县|