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

PyTorch 如何設(shè)置隨機數(shù)種子使結(jié)果可復(fù)現(xiàn)

 更新時間:2021年05月12日 11:55:00   作者:淺笑顧盼  
這篇文章主要介紹了PyTorch 設(shè)置隨機數(shù)種子使結(jié)果可復(fù)現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

由于在模型訓(xùn)練的過程中存在大量的隨機操作,使得對于同一份代碼,重復(fù)運行后得到的結(jié)果不一致。

因此,為了得到可重復(fù)的實驗結(jié)果,我們需要對隨機數(shù)生成器設(shè)置一個固定的種子。

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ù)點后幾位的差別。所以如果不是對精度要求極高,其實不太建議修改,因為會使計算效率降低。

Pytorch

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

Python & Numpy

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

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

Dataloader

如果dataloader采用了多線程(num_workers > 1), 那么由于讀取數(shù)據(jù)的順序不同,最終運行結(jié)果也會有差異。

也就是說,改變num_workers參數(shù),也會對實驗結(jié)果產(chǎn)生影響。

目前暫時沒有發(fā)現(xiàn)解決這個問題的方法,但是只要固定num_workers數(shù)目(線程數(shù))不變,基本上也能夠重復(fù)實驗結(jié)果。

補充:pytorch 固定隨機數(shù)種子踩過的坑

1.初步固定

 def setup_seed(seed):
     torch.manual_seed(seed)
     torch.cuda.manual_seed_all(seed)
     torch.cuda.manual_seed(seed)
     np.random.seed(seed)
     random.seed(seed)
     torch.backends.cudnn.deterministic = True
     torch.backends.cudnn.enabled = False
     torch.backends.cudnn.benchmark = False
     #torch.backends.cudnn.benchmark = True #for accelerating the running
 setup_seed(2019)

2.繼續(xù)添加如下代碼:

tensor_dataset = ImageList(opt.training_list,transform)
def _init_fn(worker_id): 
    random.seed(10 + worker_id)
    np.random.seed(10 + worker_id)
    torch.manual_seed(10 + worker_id)
    torch.cuda.manual_seed(10 + worker_id)
    torch.cuda.manual_seed_all(10 + worker_id)
dataloader = DataLoader(tensor_dataset,                        
                    batch_size=opt.batchSize,     
                    shuffle=True,     
                    num_workers=opt.workers,
                    worker_init_fn=_init_fn)

3.在上面的操作之后發(fā)現(xiàn)加載的數(shù)據(jù)多次試驗大部分一致了

但是仍然有些數(shù)據(jù)是不一致的,后來發(fā)現(xiàn)是pytorch版本的問題,將原先的0.3.1版本升級到1.1.0版本,問題解決

4.按照上面的操作后雖然解決了問題

但是由于將cudnn.benchmark設(shè)置為False,運行速度降低到原來的1/3,所以繼續(xù)探索,最終解決方案是把第1步變?yōu)槿缦拢瑫r將該部分代碼盡可能放在主程序最開始的部分,例如:

import torch
import torch.nn as nn
from torch.nn import init
import pdb
import torch.nn.parallel
import torch.nn.functional as F
import torch.backends.cudnn as cudnn
import torch.optim as optim
import torch.utils.data
from torch.utils.data import DataLoader, Dataset
import sys
gpu_id = "3,2"
os.environ["CUDA_VISIBLE_DEVICES"] = gpu_id
print('GPU: ',gpu_id)
def setup_seed(seed):
     torch.manual_seed(seed)
     torch.cuda.manual_seed_all(seed)
     torch.cuda.manual_seed(seed)
     np.random.seed(seed)
     random.seed(seed)
     cudnn.deterministic = True
     #cudnn.benchmark = False
     #cudnn.enabled = False

setup_seed(2019)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • python opencv 簡單閾值算法的實現(xiàn)

    python opencv 簡單閾值算法的實現(xiàn)

    這篇文章主要介紹了python opencv 簡單閾值算法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 徹底搞懂Python字符編碼

    徹底搞懂Python字符編碼

    本篇文章帶領(lǐng)大家徹底搞懂Python字符編碼的一些知識,及python字符編碼的一些基礎(chǔ)概念,需要的朋友可以參考下
    2018-01-01
  • 對python3 一組數(shù)值的歸一化處理方法詳解

    對python3 一組數(shù)值的歸一化處理方法詳解

    今天小編就為大家分享一篇對python3 一組數(shù)值的歸一化處理方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python容器使用的5個技巧和2個誤區(qū)總結(jié)

    Python容器使用的5個技巧和2個誤區(qū)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Python容器使用的5個技巧和2個誤區(qū)的相關(guān)知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-09-09
  • keras model.fit 解決validation_spilt=num 的問題

    keras model.fit 解決validation_spilt=num 的問題

    這篇文章主要介紹了keras model.fit 解決validation_spilt=num 的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python中第三方庫Faker的使用詳解

    Python中第三方庫Faker的使用詳解

    在如今的大數(shù)據(jù)時代,數(shù)據(jù)的價值可想而知。有時候為了做測試,需要模擬真實的環(huán)境,但是又不能直接使用真實數(shù)據(jù),就需要我們認(rèn)為制造一些數(shù)據(jù)出來。這時候就要來說說Python這的Faker庫了,快跟隨小編來學(xué)習(xí)一下這個庫吧
    2022-04-04
  • Python pip通過requirements.txt 文件安裝依賴

    Python pip通過requirements.txt 文件安裝依賴

    requirements.txt是定義項目依賴的python包,可通過工具生成,本文主要介紹了Python pip通過requirements.txt文件安裝依賴,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python日期格式和字符串格式相互轉(zhuǎn)換的方法

    Python日期格式和字符串格式相互轉(zhuǎn)換的方法

    這篇文章主要介紹了Python日期格式和字符串格式相互轉(zhuǎn)換的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 利用Python寫個簡易版星空大戰(zhàn)游戲

    利用Python寫個簡易版星空大戰(zhàn)游戲

    通過小編觀察,大家好像對劃水摸魚是情有獨鐘啊。所以本文給大家?guī)砹艘粋€用Python編寫的簡單版的星空大戰(zhàn)小游戲,感興趣的小伙伴可以動手試一試
    2022-03-03
  • python如何查看微信消息撤回

    python如何查看微信消息撤回

    這篇文章主要為大家詳細介紹了python實現(xiàn)查看微信消息撤回的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11

最新評論

米易县| 澜沧| 漳州市| 沙湾县| 拜城县| 肃宁县| 海门市| 唐海县| 泊头市| 河西区| 万全县| 灵台县| 改则县| 泰来县| 洞口县| 图木舒克市| 灵丘县| 江都市| 奉贤区| 宜宾市| 肇东市| 峡江县| 疏附县| 兴文县| 安义县| 兴义市| 九江县| 景宁| 酒泉市| 怀远县| 万源市| 龙岩市| 丹凤县| 普洱| 屯门区| 塔河县| 古丈县| 泽州县| 平罗县| 泌阳县| 奉新县|