pytorch學習02

自動微分

自動微分模塊torch.autograd負責自動計算張量操作的梯度,具有自動求導功能。自動微分模塊是構成神經網絡訓練的必要模塊,可以實現網絡權重參數的更新,使得反向傳播算法的實現變得簡單而高效。

1. 基礎概念

  1. 張量

    Torch中一切皆為張量,屬性requires_grad決定是否對其進行梯度計算。默認是 False,如需計算梯度則設置為True。

  2. 計算圖

    torch.autograd通過創建一個動態計算圖來跟蹤張量的操作,每個張量是計算圖中的一個節點,節點之間的操作構成圖的邊。

    在 PyTorch 中,當張量的 requires_grad=True 時,PyTorch 會自動跟蹤與該張量相關的所有操作,并構建計算圖。每個操作都會生成一個新的張量,并記錄其依賴關系。當設置為 True 時,表示該張量在計算圖中需要參與梯度計算,即在反向傳播(Backpropagation)過程中會自動計算其梯度;當設置為 False 時,不會計算梯度。?

  3. x 和 y 是輸入張量,即葉子節點,z 是中間結果,loss 是最終輸出。每一步操作都會記錄依賴關系:

    z = x * y:z 依賴于 x 和 y。

    loss = z.sum():loss 依賴于 z。

    這些依賴關系形成了一個動態計算圖,如下所示:

    ? ? x ? ? ? y
    ? ? ? ?\ ? ? /
    ? ? ? ? \ ? /
    ? ? ? ? ?\ /
    ? ? ? ? ? z
    ? ? ? ? ? |
    ? ? ? ? ? |
    ? ? ? ? ? v
    ? ? ? ? loss

?

detach():張量 x 從計算圖中分離出來,返回一個新的張量,與 x 共享數據,但不包含計算圖(即不會追蹤梯度)。

特點

  • 返回的張量是一個新的張量,與原始張量共享數據。

  • 對 x.detach() 的操作不會影響原始張量的梯度計算。

  • 推薦使用 detach(),因為它更安全,且在未來版本的 PyTorch 中可能會取代 data。

  1. 反向傳播

    使用tensor.backward()方法執行反向傳播,從而計算張量的梯度。這個過程會自動計算每個張量對損失函數的梯度。例如:調用 loss.backward() 從輸出節點 loss 開始,沿著計算圖反向傳播,計算每個節點的梯度。

  2. 梯度

    計算得到的梯度通過tensor.grad訪問,這些梯度用于優化模型參數,以最小化損失函數。

2. 計算梯度

使用tensor.backward()方法執行反向傳播,從而計算張量的梯度

2.1 標量梯度計算

參考代碼如下:

import torchdef test001():# 1. 創建張量:必須為浮點類型x = torch.tensor(1.0, requires_grad=True)# 2. 操作張量y = x ** 2# 3. 計算梯度,也就是反向傳播y.backward()# 4. 讀取梯度值print(x.grad)  # 輸出: tensor(2.)if __name__ == "__main__":test001()

?向量梯度計算

# 1. 創建張量:必須為浮點類型
? ? x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)

? ? # 2. 操作張量
? ? y = x ** 2

? ? # 3. 計算梯度,也就是反向傳播
? ? y.backward()

? ? # 4. 讀取梯度值
? ? print(x.grad)

我們也可以將向量 y 通過一個標量損失函數(如 y.mean())轉換為一個標量,反向傳播時就不需要提供額外的梯度向量參數了。這是因為標量的梯度是明確的,直接調用 .backward() 即可。

調用 loss.backward() 從輸出節點 loss 開始,沿著計算圖反向傳播,計算每個節點的梯度。

損失函數loss=mean(y)=\frac{1}{n}∑_{i=1}^ny_i,其中 n=3。

對于每個 y_i,其梯度為 \frac{?loss}{?y_i}=\frac{1}{n}=\frac13。

對于每個 x_i,其梯度為:

?

?

模型定義組件

模型(神經網絡,深度神經網絡,深度學習)定義組件幫助我們在 PyTorch 中定義、訓練和評估模型等。

在進行模型訓練時,有三個基礎的概念我們需要顆粒度對齊下:

常用損失函數舉例:

1.均方誤差損失(MSE Loss)

  • 函數: torch.nn.MSELoss

  • 適用場景: 通常用于回歸任務,例如預測連續值。

  • 特點: 對異常值敏感,因為誤差的平方會放大較大的誤差。

2.L1 損失(L1 Loss)

也叫做MAE(Mean Absolute Error,平均絕對誤差)

  • 函數: torch.nn.L1Loss

  • 適用場景: 用于回歸任務,對異常值的敏感性較低。

  • 特點: 比 MSE 更魯棒,但計算梯度時可能不穩定。

3.交叉熵損失(Cross-Entropy Loss)

  • 函數: torch.nn.CrossEntropyLoss

  • 參數:reduction:mean-平均值,sum-總和

  • 公式:

  • 適用場景: 用于多分類任務,輸入是未經 softmax 處理的 logits。

  • 特點: 自帶 softmax 操作,適合分類任務,能夠有效處理類別不平衡問題。

4.二元交叉熵損失(Binary Cross-Entropy Loss)

  • 函數: torch.nn.BCELoss 或 torch.nn.BCEWithLogitsLoss

  • 參數:reduction:mean-平均值,sum-總和

  • 公式:

  • 適用場景: 用于二分類任務。

  • 特點: BCEWithLogitsLoss 更穩定,因為它結合了 Sigmoid 激活函數和 BCE 損失。

?

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

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

相關文章

Java虛擬機(JVM)平臺無關?相關?

計算機的概念模型 計算機實際上就是實現了一個圖靈機模型。即,輸入參數,根據程序計算,輸出結果。圖靈機模型如圖。 Tape是輸入數據,Program是針對這些數據進行計算的程序,中間橫著的方塊表示的是機器的狀態。 目前使…

satoken的奇奇怪怪的錯誤

發了 /user/getBrowseDetail和/user/getResponDetail,但為什么進入handle里面有三次?且第一次的handle類型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,這一次進來的時候flag為false,StpUtils.checkLogin拋出了異常 第二次進來的…

【KWDB 創作者計劃】_上位機知識篇---SDK

文章目錄 前言一、SDK的核心組成API(應用程序接口)庫文件(Libraries)開發工具文檔與示例依賴項與環境配置二、SDK的作用簡化開發流程確保兼容性與穩定性加速產品迭代功能擴展與定制三、SDK的典型應用場景硬件設備開發操作系統與平臺云服務與API集成游戲與圖形開發四、SDK與…

golang處理時間的包time一次性全面了解

本文旨在對官方time包有個全面學習了解。不鉆摳細節,但又有全面了解,重點介紹常用的內容,一些低頻的可能這輩子可能都用不上。主打一個花最少時間辦最大事。 Duration對象: 兩個time實例經過的時間,以長度為int64的納秒來計數。 常見的durati…

PyCharm Flask 使用 Tailwind CSS 配置

使用 Tailwind CSS 步驟 1:初始化項目 在 PyCharm 終端運行:npm init -y安裝 Tailwind CSS:npm install -D tailwindcss postcss autoprefixer初始化 Tailwind 配置文件:npx tailwindcss init這會生成 tailwind.config.js。 步…

【英語語法】基本句型

目錄 前言一:主謂二:主謂賓三:主系表四:主謂雙賓五:主謂賓補 前言 英語基本句型是語法體系的基石,以下是英語五大基本句型。 一:主謂 結構:主語 不及物動詞 例句: T…

隔離DCDC輔助電源解決方案與產品應用科普

**“隔離”與“非隔離的區別** 隔離: 1、AC-DC,也叫“一次電源”,人可能會碰到的應用場合,起安全保護作用; 2、為了抗干擾,通過隔離能有效隔絕干擾信號傳輸。 非隔離: 1、“安全特低電壓&#…

DS-SLAM 運動一致性檢測的源碼解讀

運動一致性檢測是Frame.cc的Frame::ProcessMovingObject(const cv::Mat &imgray)函數。 對應DS-SLAM流程圖Moving consistency check的部分 把這個函數單獨摘出來&#xff0c;寫了一下對兩幀檢測&#xff0c;查看效果的程序&#xff1a; #include <opencv2/opencv.hpp…

安全測試的全面知識體系及實現路徑

以下是安全測試的全面知識體系及實現路徑,結合最新工具和技術趨勢(截至2025年): 一、安全測試核心類型與工具 1. 靜態應用安全測試(SAST) 知識點: 通過分析源代碼、字節碼或二進制文件識別漏洞(如SQL注入、緩沖區溢出)支持早期漏洞發現,減少修復成本,適合白盒測試場…

GPT-4o Image Generation Capabilities: An Empirical Study

GPT-4o 圖像生成能力:一項實證研究 目錄 介紹研究背景方法論文本到圖像生成圖像到圖像轉換圖像到 3D 能力主要優勢局限性與挑戰對比性能影響與未來方向結論介紹 近年來,圖像生成領域發生了巨大的變化,從生成對抗網絡 (GAN) 發展到擴散模型,再到可以處理多種模態的統一生成架…

Redis之全局唯一ID

全局ID生成器 文章目錄 全局ID生成器一、全局ID生成器的定義定義核心作用 二、全局ID生成器需滿足的特征1. 唯一性&#xff08;Uniqueness&#xff09;?2. 高性能&#xff08;High Performance&#xff09;?3. 可擴展性&#xff08;Scalability&#xff09;?4. 有序性&#…

nginx中的代理緩存

1.緩存存放路徑 對key取哈希值之后&#xff0c;設置cache內容&#xff0c;然后得到的哈希值的倒數第一位作為第一個子目錄&#xff0c;倒數第三位和倒數第二位組成的字符串作為第二個子目錄&#xff0c;如圖。 proxy_cache_path /xxxx/ levels1:2 2.文件名哈希值

靜態時序分析STA——8.1 時序檢查(建立時間檢查)

文章目錄 一、時序路徑組二、建立時間檢查1. 觸發器到觸發器路徑1&#xff09;時鐘單元UCKBUF0的延遲計算2&#xff09;時鐘源延遲&#xff08;clock source latency&#xff09; 2. 輸入到觸發器路徑1) 虛擬時鐘的輸入路徑2) 具有實際時鐘的輸入路徑 3. 觸發器到輸出路徑4. 輸…

了解高速設計的信號完整性仿真

高速設計需要精確的信號傳輸&#xff0c;以確保最佳性能。信號完整性差會導致關鍵應用中的誤碼、數據損壞甚至系統故障等問題。介電常數、損耗角正切和插入損耗等因素會顯著影響信號質量。通過使用信號完整性仿真&#xff0c;您可以及早發現并解決這些挑戰。這種主動方法有助于…

RAGFlowwindows本地pycharm運行

Python環境準備 1. 安裝pipx。如已經安裝&#xff0c;可跳過本步驟&#xff1a; python -m pip install --user pipxpython -m pipx ensurepath## 驗證安裝pipx --version2. 安裝 uv。如已經安裝&#xff0c;可跳過本步驟&#xff1a; pipx install uv ## 設置為阿里云 PyPI…

STM32-FreeRTOS的詳細配置

配置FreeRTOS 原文鏈接&#xff1a;https://ydamooc.github.io/posts/c9defcd/ 1.1 下載FreeRTOS 打開FreeRTOS官網&#xff1a;https://www.freertos.org/ 點擊下載&#xff0c;并且選擇"FreeRTOS 202212.01"版本&#xff0c;再點擊Download按鈕下載官方的資源包…

Linux筆記---動靜態庫(原理篇)

1. ELF文件格式 動靜態庫文件的構成是什么樣的呢&#xff1f;或者說二者的內容是什么&#xff1f; 實際上&#xff0c;可執行文件&#xff0c;目標文件&#xff0c;靜態庫文件&#xff0c;動態庫文件都是使用ELF文件格式進行組織的。 ELF&#xff08;Executable and Linkable…

HVV-某田相關經歷

一、背景 本次項目為期兩周&#xff0c;由集團主導招募攻擊隊員對集團下屬及其子公司進行的攻防演練。本次項目主導研判分析應急排查內部Nday發掘。 二、研判分析 2.1、帆軟V10 漏洞概述 帆軟 V10 及 V11 版本報表軟件存在反序列化漏洞&#xff0c;攻擊者可利用該漏洞使用…

AI與物聯網的深度融合:開啟智能生活新時代

在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;和物聯網&#xff08;IoT&#xff09;作為兩大前沿技術&#xff0c;正在加速融合&#xff0c;為我們的生活和工作帶來前所未有的變革。這種融合不僅提升了設備的智能化水平&#xff0c;還為各行各業帶來了新的機…

Linux `init` 相關命令的完整使用指南

Linux init 相關命令的完整使用指南—目錄 一、init 系統簡介二、運行級別&#xff08;Runlevel&#xff09;詳解三、常用 init 命令及使用方法1. 切換運行級別2. 查看當前運行級別3. 服務管理4. 緊急模式&#xff08;Rescue Mode&#xff09; 四、不同 Init 系統的兼容性1. Sy…