亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PyTorch中設置隨機數種子使結果可復現

發布時間:2021-05-12 15:57:54 來源:億速云 閱讀:333 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在PyTorch中設置隨機數種子使結果可復現,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

CUDNN

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

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

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

Pytorch

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

Python & Numpy

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

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

Dataloader

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

也就是說,改變num_workers參數,也會對實驗結果產生影響。

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

補充:pytorch 固定隨機數種子踩過的坑

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.繼續添加如下代碼:

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.在上面的操作之后發現加載的數據多次試驗大部分一致了

但是仍然有些數據是不一致的,后來發現是pytorch版本的問題,將原先的0.3.1版本升級到1.1.0版本,問題解決

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

但是由于將cudnn.benchmark設置為False,運行速度降低到原來的1/3,所以繼續探索,最終解決方案是把第1步變為如下,同時將該部分代碼盡可能放在主程序最開始的部分,例如:

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)

pytorch的優點

1.PyTorch是相當簡潔且高效快速的框架;2.設計追求最少的封裝;3.設計符合人類思維,它讓用戶盡可能地專注于實現自己的想法;4.與google的Tensorflow類似,FAIR的支持足以確保PyTorch獲得持續的開發更新;5.PyTorch作者親自維護的論壇 供用戶交流和求教問題6.入門簡單

上述內容就是怎么在PyTorch中設置隨機數種子使結果可復現,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤峰市| 民县| 玛曲县| 平谷区| 耿马| 天长市| 邯郸县| 双城市| 巩留县| 阜南县| 蓝山县| 延边| 福清市| 钦州市| 浦县| 天柱县| 五台县| 嘉兴市| 昌邑市| 潼关县| 冀州市| 秭归县| 赣州市| 洪洞县| 布尔津县| 屏东县| 芒康县| 罗田县| 海盐县| 工布江达县| 泰顺县| 博乐市| 金华市| 武定县| 郎溪县| 民丰县| 宁乡县| 咸阳市| 当涂县| 钟山县| 都匀市|