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

Pytorch固定隨機(jī)數(shù)種子的方法小結(jié)

 更新時(shí)間:2023年12月08日 11:15:18   作者:lgc0208  
在對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練時(shí),有時(shí)候會(huì)存在對(duì)訓(xùn)練過(guò)程進(jìn)行復(fù)現(xiàn)的需求,然而,每次運(yùn)行時(shí) Pytorch、Numpy 中的隨機(jī)性將使得該目的變得困難重重,基于此,本文記錄了 Pytorch 中的固定隨機(jī)數(shù)種子的方法,需要的朋友可以參考下

引言

在對(duì)神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練時(shí),有時(shí)候會(huì)存在對(duì)訓(xùn)練過(guò)程進(jìn)行復(fù)現(xiàn)的需求。然而,每次運(yùn)行時(shí) Pytorch、Numpy 中的隨機(jī)性將使得該目的變得困難重重。在程序運(yùn)行前固定所有隨機(jī)數(shù)的種子有望解決這一問(wèn)題。基于此,本文記錄了 Pytorch 中的固定隨機(jī)數(shù)種子的方法。

在使用 Pytorch 對(duì)模型進(jìn)行訓(xùn)練時(shí),通常涉及到隨機(jī)數(shù)的模塊包括:Python、Pytorch、Numpy、Cudnn。因此,在開(kāi)始訓(xùn)練前,需要針對(duì)這些涉及隨機(jī)數(shù)的模塊進(jìn)行隨機(jī)數(shù)種子的固定。

1. Python

Python 本身涉及到的隨機(jī)性主要是 Python 自帶的 random 庫(kù)隨機(jī)化和 Hash 隨機(jī)化問(wèn)題,需要通過(guò) os 庫(kù)對(duì)其進(jìn)行限制:

import os, random
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)

2. Numpy

在使用 Numpy 庫(kù)取隨機(jī)數(shù)時(shí),需要對(duì)其隨機(jī)數(shù)種子進(jìn)行限制:

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

3. Pytorch

當(dāng) Pytorch 使用 CPU 進(jìn)行運(yùn)算時(shí),需要設(shè)定 CPU 支撐下的 Pytorch 隨機(jī)數(shù)種子:

import torch
torch.manual_seed(seed)

當(dāng) Pytorch 使用 GPU 進(jìn)行運(yùn)算時(shí),需要設(shè)定 GPU 支撐下的 Pytorch 隨機(jī)數(shù)種子:

import torch
torch.cuda.manual_seed(seed)
torch.cuda.manual_seed_all(seed) # 使用多 GPU 時(shí)使用

需要特別注意的是:目前很多博客和知乎回答提出 torch.cuda.manual_seed(seed) 和 torch.cuda.manual_seed_all(seed) 具有相同的作用。這個(gè)結(jié)論需要注意 Pytorch 版本。在筆者所用的 Pytorch 2.1 版本下,這兩個(gè)函數(shù)的作用完全不同。參考官方文檔:torch.cuda.manual_seed 和 torch.cuda.manual_seed_all(seed)

當(dāng) Pytorch 使用 Cudnn 進(jìn)行加速運(yùn)算時(shí),還需要限制 Cudnn 在加速過(guò)程中涉及到的隨機(jī)策略:

import torch
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False

總結(jié)

基于上述庫(kù)的固定隨機(jī)數(shù)方法總結(jié)為:

def set_random_seed(seed: int) -> None:
	random.seed(seed)
	os.environ['PYTHONHASHSEED'] = str(seed)
	np.random.seed(seed)
	torch.manual_seed(seed)
	torch.cuda.manual_seed_all(seed)
	torch.backends.cudnn.benchmark = False
	torch.backends.cudnn.deterministic = True

seed = 114514
set_torch_seed(seed)

如果在實(shí)踐中還調(diào)用了其他涉及隨機(jī)性的第三方庫(kù),則需要根據(jù)上述思路對(duì)該固定隨機(jī)數(shù)方法進(jìn)行動(dòng)態(tài)補(bǔ)充。

以上就是Pytorch固定隨機(jī)數(shù)種子的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Pytorch固定隨機(jī)數(shù)種子的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境

    在使用Python開(kāi)發(fā)項(xiàng)目或者編寫(xiě)腳本的時(shí)候通常需要建立不同版本的Python的虛擬環(huán)境,本文主要介紹了Anaconda中利用conda創(chuàng)建、激活、刪除、添加新環(huán)境,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox)

    selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox)

    這篇文章主要介紹了selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • Python中python-nmap模塊的使用介紹

    Python中python-nmap模塊的使用介紹

    這篇文章主要介紹了Python中python-nmap模塊的使用,主要是portScanner()類(lèi)方法展開(kāi)全文,portScanner()類(lèi)用于實(shí)現(xiàn)對(duì)指定主機(jī)進(jìn)行端口掃描,更多介紹內(nèi)容,需要的朋友可以參考一下
    2022-02-02
  • Python異常處理中容易犯得錯(cuò)誤總結(jié)

    Python異常處理中容易犯得錯(cuò)誤總結(jié)

    本文整理了python異常處理中finally的兩個(gè)容易犯的錯(cuò)誤,適合新手朋友的學(xué)習(xí),感興趣的朋友可以參考下
    2021-06-06
  • Python3.7 dataclass使用指南小結(jié)

    Python3.7 dataclass使用指南小結(jié)

    本文將帶你走進(jìn)python3.7的新特性dataclass,通過(guò)本文你將學(xué)會(huì)dataclass的使用并避免踏入某些陷阱。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示

    Python如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示

    現(xiàn)在二維碼很流行,大街小巷大小商品廣告上的二維碼標(biāo)簽都隨處可見(jiàn),下面這篇文章主要給大家介紹了關(guān)于如何使用qrcode生成指定內(nèi)容的二維碼并在GUI界面顯示的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 講解Python中for循環(huán)下的索引變量的作用域

    講解Python中for循環(huán)下的索引變量的作用域

    這篇文章主要介紹了講解Python中for循環(huán)下的索引變量的作用域,是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),本文給出了Python3的示例幫助讀者理解,需要的朋友可以參考下
    2015-04-04
  • 簡(jiǎn)單實(shí)現(xiàn)python收發(fā)郵件功能

    簡(jiǎn)單實(shí)現(xiàn)python收發(fā)郵件功能

    這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)python收發(fā)郵件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目的實(shí)現(xiàn)步驟

    Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目的實(shí)現(xiàn)步驟

    本文主要介紹了Pycharm社區(qū)版創(chuàng)建Flask項(xiàng)目,包括設(shè)置Python環(huán)境、安裝Flask庫(kù)以及創(chuàng)建基本的項(xiàng)目結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • 如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用

    如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用

    這篇文章主要介紹了如何使用python3獲取當(dāng)前路徑及os.path.dirname的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論