Pytorch中的主要函數

目錄

  • 一、torch.manual_seed(seed)
  • 二、torch.cuda.manual_seed(seed)
  • 三、torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)
  • 四、給大家寫一個常用的自動選擇電腦cuda 或者cpu 的小技巧
  • 五、torch.version.cuda;torch.backends.cudnn.version();打印cuda、cudnn版本
  • 六、torch.autograd.grad()自動求梯度

我就基本的解釋一下吧,!

一、torch.manual_seed(seed)

功能: 用于手動設置 PyTorch 的隨機數生成器的種子。當你設置了一個特定的種子后,后續所有依賴隨機數生成的操作都會產生可重復的結果。
參數: seed 是一個整數,取值范圍通常是 32 位整數范圍(-2147483648 到 2147483647)。

示例代碼如下:

import torch# 設置隨機種子
torch.manual_seed(42)
# 生成隨機張量
tensor1 = torch.randn(2, 2)
print(tensor1)# 再次設置相同的種子
torch.manual_seed(42)
tensor2 = torch.randn(2, 2)
print(tensor2)# 驗證兩次生成的張量是否相同
print(torch.allclose(tensor1, tensor2))  # 輸出 True

運行結果如下圖:
在這里插入圖片描述
(一般還有個torch.seed()但是被棄用了,因為每次都是隨機的結果,在科研啥的,一般都手動指定隨機數種子,)

先解釋一下,什么是隨機數種子:
PyTorch 中隨機數種子的作用原理
隨機數種子就像是隨機數生成器的起始狀態標識。在 PyTorch 里,隨機數生成器是基于特定的算法(如 Mersenne Twister 算法)來工作的。當你設置一個隨機數種子時,實際上是將隨機數生成器初始化為一個特定的狀態。

從這個特定狀態開始,隨機數生成器會按照固定的算法規則生成一系列隨機數。只要種子不變,每次從這個狀態開始生成的隨機數序列都是相同的。這就保證了在相同的代碼和相同的種子設置下,每次運行代碼時,所有依賴隨機數生成的操作(如初始化模型權重、打亂數據集等)都會產生相同的結果,從而實現實驗的可重復性。

例如,在神經網絡訓練中,我們通常會隨機初始化模型的權重。如果不設置隨機數種子,每次運行代碼時權重的初始化值都不同,那么模型的訓練結果也會有差異,不利于實驗結果的對比和分析。而通過設置固定的隨機數種子,我們可以確保每次運行代碼時模型的初始權重是相同的,這樣就可以更準確地評估不同訓練參數或方法對模型性能的影響。

二、torch.cuda.manual_seed(seed)

功能: 專門為 CUDA 設備(即 GPU)設置隨機數種子。如果你的代碼在 GPU 上運行,使用這個函數可以確保在 GPU 上的隨機操作具有可重復性。
參數: seed 同樣是一個整數。

import torchif torch.cuda.is_available():# 為 CUDA 設備設置隨機種子torch.cuda.manual_seed(42)# 在 GPU 上生成隨機張量device = torch.device("cuda")tensor = torch.randn(2, 2).to(device)print(tensor)

在這里插入圖片描述
注意:沒有CUDA的就別跑了,會報錯的。

三、torch.rand(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False)

功能: 生成指定形狀的服從均勻分布的隨機數張量,取值范圍是 [0, 1)。
參數:
*size: 張量的形狀,例如 (2, 3) 表示生成一個 2 行 3 列的張量。
out: 可選參數,用于指定輸出張量。
dtype: 張量的數據類型。
layout: 張量的布局,一般使用默認的 torch.strided。
device: 張量存儲的設備,如 ‘cpu’ 或 ‘cuda’。
requires_grad: 是否需要計算梯度。

import torch# 生成一個 2 行 3 列的隨機張量
random_tensor = torch.rand(2, 3)
print(random_tensor)

示例結果:
在這里插入圖片描述

四、給大家寫一個常用的自動選擇電腦cuda 或者cpu 的小技巧

import torch# 判斷 CUDA 是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")

在這里插入圖片描述

五、torch.version.cuda;torch.backends.cudnn.version();打印cuda、cudnn版本

import torch# 判斷 CUDA 是否可用
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")print(f"Using device: {device}")print(torch.cuda.is_available()) #查看是否有cuda
print(torch.backends.cudnn.is_available()) #查看是否有cudnn
print(torch.version.cuda) #打印cuda的版本
print(torch.backends.cudnn.version()) #打印cudnn的版本

我的運行結果如下:
在這里插入圖片描述
大家如果有安裝環境有問題的也可以私信我哦~

六、torch.autograd.grad()自動求梯度

torch.autograd.grad()用于求取梯度;
函數原型:
torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)

outputs:
類型:Tensor 或 Tensor 列表
描述:目標張量,即需要計算梯度的張量。
inputs:
類型:Tensor 或 Tensor 列表
描述:輸入張量,用于計算梯度的張量。
grad_outputs(可選):
類型:Tensor 或 Tensor 列表
描述:目標張量對應的梯度。如果outputs 是一個標量,則 grad_outputs 不需要指定;如果 outputs 是一個張量或張量列表,需要指定 grad_outputs 的形狀與之對應。
retain_graph(可選,默認值:None):
類型:布爾值
描述:是否保留計算圖。在默認情況下,計算圖在反向傳播后會被釋放以節省內存。如果需要多次反向傳播同一個計算圖,可以設置為 True。
create_graph(可選,默認值:False):
類型:布爾值
描述:是否創建新的計算圖。如果設置為 True,梯度計算將被跟蹤,生成的梯度張量將保留計算圖,從而允許進行高階導數的計算。
only_inputs(可選,默認值:True):
類型:布爾值
描述:是否只計算輸入張量的梯度。如果設置為 True,僅輸入張量的梯度會被計算。
allow_unused(可選,默認值:False):
類型:布爾值
描述:是否允許輸入張量未被使用。如果某些輸入張量未被 outputs 使用,并且沒有被計算梯度,則會拋出錯誤。如果設置為 True,這些未使用的輸入張量的梯度將返回為 None。
返回值
類型:Tensor 或 Tensor 列表
返回對應輸入張量的梯度。

outputs:是你希望對其進行求導的標量

import torch# 創建兩個張量,requires_grad=True 表示需要計算梯度
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
y = torch.tensor([4.0, 5.0, 6.0], requires_grad=True)# 定義一個函數 z = x * y
z = x * y# 使用 torch.autograd.grad() 計算梯度
grad_z_x = torch.autograd.grad(outputs=z, inputs=x, grad_outputs=torch.ones_like(z))print("梯度 dz/dx:", grad_z_x)

在這里插入圖片描述


后面如果還有什么用到的,我會在這繼續更新…ing!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71380.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot中對接Twilio以實現發送驗證碼和驗證短信碼

Twilio介紹 Twilio是一家提供云通信服務的公司,旨在幫助開發者和企業通過簡單的API實現各種通信功能。以下是Twilio的一些主要特點和服務介紹: 核心功能 短信服務(SMS):允許用戶通過API發送和接收短信,支…

VSCode詳細安裝步驟,適用于 Windows/macOS/Linux 系統

以下是 Visual Studio Code (VSCode) 的詳細安裝步驟,適用于 Windows/macOS/Linux 系統: VSCode 的詳細安裝步驟 一、Windows 系統安裝1. 下載安裝包2. 運行安裝程序3. 驗證安裝 二、macOS 系統安裝1. 方法一:官網下載安裝包2. 方法二&#x…

基于PyTorch的深度學習3——基于autograd的反向傳播

反向傳播,可以理解為函數關系的反向傳播。

設備管理系統功能與.NET+VUE(IVIEW)技術實現

在現代工業和商業環境中,設備管理系統(Equipment Management System,簡稱EMS)是確保設備高效運行和維護的關鍵工具。本文采用多租戶設計的設備管理系統,基于.NET后端和VUE前端(使用IVIEW UI框架&#xff09…

PHP之特性

在你有別的編程語言的基礎下&#xff0c;你想學習PHP&#xff0c;可能要了解的PHP特有的東西。 定界符 使用<<<TT(可以是任意字符&#xff0c;但是不可以在別的地方使用過)和TT&#xff0c;會解析html格式和變量&#xff0c;如果在<<<后面加上單引號就會不…

9-Agent大模型中工作流的使用方法分析

目錄 關鍵詞 摘要 速覽 配置插件進行新聞內容查找的工作流設置 自動化調用用戶輸入變量的插件配置教程 配置大模型以整理并簡要輸出新聞內容 新聞內容總結功能調試與優化 搭建與發布工作流優化布局的流程詳解 創建和配置智能體工作流程 調試頁面與工作流配置演示 思…

記一次:泛微OA集成Mybatis后 insert/update執行成功,但未真正插入或修改數據

背景&#xff1a;通過Mybatis插入數據或更新數據&#xff0c;顯示插入/更新成功&#xff0c;查詢數據庫&#xff0c;發現并未插入成功、數據也沒更新成功。下面是Mapper文件 public interface TestOrmMapper {int insertByTest(Param("requestId") Integer requestI…

使用 Spring Boot 實現前后端分離的海康威視 SDK 視頻監控

使用 Spring Boot 實現前后端分離的海康威視 SDK 視頻監控系統&#xff0c;可以分為以下幾個步驟&#xff1a; 1. 系統架構設計 前端&#xff1a;使用 Vue.js、React 或 Angular 等前端框架實現用戶界面。后端&#xff1a;使用 Spring Boot 提供 RESTful API&#xff0c;負責與…

【大模型系列篇】國產開源大模型DeepSeek-V3技術報告解析

DeepSeek-V3技術報告 目錄 DeepSeek-V3技術報告 1. 摘要 2. 引言 3. DeepSeek V3 架構 3.1 基礎架構 3.1.1. 多頭潛在注意力 3.1.2. DeepSeekMoE和無輔助損失的負載均衡 3.2 多令牌預測 4. 基礎設施 4.1 計算集群 4.2 訓練框架 4.2.1. DualPipe算法與計算通信協同優…

負載均衡 - 一致性hash算法

構建場景 假如我們有三臺緩存服務器編號node0、node1、node2&#xff0c;現在有3000萬個key&#xff0c;希望可以將這些個key均勻的緩存到三臺機器上&#xff0c;你會想到什么方案呢&#xff1f; 我們可能首先想到的方案&#xff0c;是取模算法hash&#xff08;key&#xff0…

pdfplumber 解析 PDF 表格的原理

&#x1f4cc; pdfplumber 解析 PDF 表格的原理 pdfplumber 處理表格的原理是基于幾何分析&#xff08;geometric analysis&#xff09;&#xff0c;它通過分析 PDF 頁面中的線條、單元格間距和文本分布&#xff0c;提取表格數據。它主要利用 垂直線&#xff08;vertical line…

洛谷P1334

題目如下 思路&#xff1a; 每次選擇最短的兩塊木板進行合并&#xff0c;直到只剩下一塊木板。使用最小堆&#xff08;優先隊列&#xff09;來實現這一過程。使用最小堆&#xff1a; 將所有木板的長度放入最小堆&#xff08;優先隊列&#xff09; 每次從堆中取出兩塊最短的木…

JVM(Java Virtual Machine,Java 虛擬機)的作用

JVM&#xff08;Java Virtual Machine&#xff0c;Java 虛擬機&#xff09;的作用至關重要&#xff0c;它是 Java 語言“一次編寫&#xff0c;到處運行”&#xff08;Write Once, Run Anywhere&#xff0c;WORA&#xff09;特性的基石&#xff0c;也是 Java 平臺的核心組成部分…

總結(尚硅谷Vue3入門到實戰,最新版vue3+TypeScript前端開發教程)

1.Vue簡介 2020年9月18日&#xff0c;Vue.js發布版3.0版本&#xff0c;代號&#xff1a;One Piece 1.1.性能的提升 打包大小減少41%。 初次渲染快55%, 更新渲染快133%。 內存減少54%。 1.2.源碼的升級 使用Proxy代替defineProperty實現響應式。 重寫虛擬DOM的實現和Tree-Shak…

SolidWorks 轉 PDF3D 技術詳解

在現代工程設計與制造流程中&#xff0c;不同軟件間的數據交互與格式轉換至關重要。將 SolidWorks 模型轉換為 PDF3D 格式&#xff0c;能有效解決模型展示、數據共享以及跨平臺協作等問題。本文將深入探討 SolidWorks 轉 PDF3D 的技術原理、操作流程及相關注意事項&#xff0c;…

【深度學習CV】【圖像分類】從CNN(卷積神經網絡)、ResNet遷移學習到GPU高效訓練優化【案例代碼】詳解

摘要 本文分類使用的是resNet34,什么不用yolo v8&#xff0c;yolo v10系列,雖然他們也可以分類&#xff0c;因為yolo系列模型不純粹&#xff0c;里面包含了目標檢測的架構&#xff0c;所以分類使用的是resNet 本文詳細介紹了三種不同的方法來訓練卷積神經網絡進行 CIFAR-10 圖…

OPPO Find N5折疊手機:創新與實用的完美融合,FPC應用展現科技魅力【新立電子】

OPPO Find N5作為2025年新出世的折疊手機&#xff0c;以其卓越的設計、強大的性能以及創新的技術&#xff0c;為消費者帶來了全新的使用體驗。FPC&#xff08;柔性電路板&#xff09;在其中的運用&#xff0c;也進一步提升了手機的整體性能和用戶體驗。 OPPO Find N5的最大亮點…

【AD】PCB增加相關圖層——以機械層為例

問題&#xff1a;圖中PCB僅有機械層1和機械層2&#xff0c;想要在加一個機械層3 解決 1.點擊視圖—面板—View Configuration&#xff0c;選中機械層右鍵單擊增加層&#xff0c;其他層類似

Qt5 C++ QMap使用總結

文章目錄 功能解釋代碼使用案例代碼解釋注意事項代碼例子參考 功能解釋 QList<T> QMap::values() const Returns a list containing all the values in the map, in ascending order of their keys. If a key is associated with multiple values, all of its values wi…

測試用例總結

一、通用測試用例八要素   1、用例編號&#xff1b;    2、測試項目&#xff1b;   3、測試標題&#xff1b; 4、重要級別&#xff1b;    5、預置條件&#xff1b;    6、測試輸入&#xff1b;    7、操作步驟&#xff1b;    8、預期輸出 二、具體分析通…