亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

引言

在對神經(jīng)網(wǎng)絡模型進行訓練時,有時候會存在對訓練過程進行復現(xiàn)的需求。然而,每次運行時 Pytorch、Numpy 中的隨機性將使得該目的變得困難重重。在程序運行前固定所有隨機數(shù)的種子有望解決這一問題?;诖耍疚挠涗浟?Pytorch 中的固定隨機數(shù)種子的方法。

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

1. Python

Python 本身涉及到的隨機性主要是 Python 自帶的 random 庫隨機化和 Hash 隨機化問題,需要通過 os 庫對其進行限制:

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

2. Numpy

在使用 Numpy 庫取隨機數(shù)時,需要對其隨機數(shù)種子進行限制:

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

3. Pytorch

當 Pytorch 使用 CPU 進行運算時,需要設定 CPU 支撐下的 Pytorch 隨機數(shù)種子:

import torch
torch.manual_seed(seed)

當 Pytorch 使用 GPU 進行運算時,需要設定 GPU 支撐下的 Pytorch 隨機數(shù)種子:

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

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

當 Pytorch 使用 Cudnn 進行加速運算時,還需要限制 Cudnn 在加速過程中涉及到的隨機策略:

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

總結(jié)

基于上述庫的固定隨機數(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)

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

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

相關文章

最新評論