最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch的backward()的底層實現(xiàn)邏輯詳解

 更新時間:2023年11月20日 11:34:16   作者:子燕若水  
自動微分是一種計算張量(tensors)的梯度(gradients)的技術,它在深度學習中非常有用,這篇文章主要介紹了pytorch的backward()的底層實現(xiàn)邏輯,需要的朋友可以參考下

自動微分是一種計算張量(tensors)的梯度(gradients)的技術,它在深度學習中非常有用。自動微分的基本思想是:

  • 自動微分會記錄數(shù)據(jù)(張量)和所有執(zhí)行的操作(以及產(chǎn)生的新張量)在一個由函數(shù)(Function)對象組成的有向無環(huán)圖(DAG)中。在這個圖中,葉子節(jié)點是輸入張量,根節(jié)點是輸出張量。通過從根節(jié)點到葉子節(jié)點追蹤這個圖,可以使用鏈式法則(chain rule)自動地計算梯度。
  • 在前向傳播(forward pass)中,自動微分同時做兩件事:
    • 運行請求的操作來計算一個結果張量,以及
    • 在 DAG 中保留操作的梯度函數(shù)。
    • 在 DAG 中保留操作的梯度函數(shù),這就是說,當你給自動微分一個張量和一個操作,它不僅會計算出結果張量,還會記住這個操作的梯度函數(shù),也就是這個操作對輸入張量的導數(shù)。例如,如果你給自動微分一個張量 x = [1, 2, 3] 和一個操作 y = x + 1,它不僅會計算出 y = [2, 3, 4],還會記住這個操作的梯度函數(shù)是 dy/dx = 1,也就是說,y 對 x 的導數(shù)是 1。這樣,當你需要計算梯度時,自動微分就可以根據(jù)這個梯度函數(shù)來計算出結果張量對輸入張量的梯度。
  • 在PyTorch中,DAG是動態(tài)的。需要注意的一點是,圖是從頭開始重新創(chuàng)建的;在每個 .backward() 調(diào)用之后,autograd開始填充一個新的圖。
  • 后向傳播開始于當在 DAG 的根節(jié)點上調(diào)用 .backward() 方法。這個方法會觸發(fā)自動微分開始計算梯度。
  • 自動微分會從每個 .grad_fn 中計算梯度,這個 .grad_fn 是一個函數(shù)對象,它保存了操作的梯度函數(shù)。例如,如果一個操作是 y = x + 1,那么它的 .grad_fn 就是 dy/dx = 1。
  • 自動微分會將計算出的梯度累加到相應張量的 .grad 屬性中,這個 .grad 屬性是一個張量,它保存了結果張量對輸入張量的梯度。例如,如果一個結果張量是 y = [2, 3, 4],那么它的 .grad 屬性就是 [1, 1, 1],表示 y 對 x 的梯度是 1。
  • 使用鏈式法則(chain rule),自動微分會一直向后傳播,直到到達葉子張量。鏈式法則是一種數(shù)學公式,它可以將復合函數(shù)的梯度分解為簡單函數(shù)的梯度的乘積。例如,如果一個復合函數(shù)是 z = f(g(x)),那么它的梯度是 dz/dx = dz/dg * dg/dx。
 
import torch
import torch.nn as nn
M = nn.Linear(2, 2) # neural network module
M.eval() # set M to evaluation mode
with torch.no_grad(): # disable gradient computation
    for param in M.parameters(): # loop over all parameters
        param.fill_(1) # fill the parameter with 1
M.requires_grad_(False)
a = torch.tensor([1., 2.], requires_grad=True) # leaf node
b = torch.tensor([13., 32.], requires_grad=True) # leaf node
c = M(a) # non-leaf node
c2 = M(b) # non-leaf node
d = c * 2  # non-leaf node
d.sum().backward() # compute gradients
print(a.grad)
print(b.grad)
print(c.grad)
print(d.grad)
print(M.weight.grad) # None

構建計算圖:當我們調(diào)用backward()方法時,PyTorch會自動構建從葉子節(jié)點a到損失值d.sum()的計算圖,這是一個有向無環(huán)圖,表示了各個張量之間的運算關系。計算圖中還包含了兩個中間變量c和d,它們是由a經(jīng)過M模型的前向傳播得到的。計算圖的作用是記錄反向傳播的路徑,以便于計算梯度。 計算梯度:在計算圖中,每個張量都有一個屬性grad,用于存儲它的梯度值。當我們調(diào)用backward()方法時,PyTorch會沿著計算圖按照鏈式法則計算并填充每個張量的grad屬性。由于我們只對葉子節(jié)點a的梯度感興趣,所以只有a的grad屬性會被計算出來,而中間變量c和d的grad屬性會被忽略。a的grad屬性的值是損失值d.sum()對a的偏導數(shù),表示了a的變化對損失值的影響。 

到此這篇關于pytorch的backward()的底層實現(xiàn)邏輯的文章就介紹到這了,更多相關pytorch backward()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • OFD格式文件及如何適應Python將PDF轉換為OFD格式文件

    OFD格式文件及如何適應Python將PDF轉換為OFD格式文件

    OFD是中國自主研發(fā)的一種固定版式文檔格式,主要用于電子公文、檔案管理等領域,這篇文章主要介紹了OFD格式文件及如何適應Python將PDF轉換為OFD格式文件的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-11-11
  • Python使用xlrd模塊實現(xiàn)操作Excel讀寫的方法匯總

    Python使用xlrd模塊實現(xiàn)操作Excel讀寫的方法匯總

    本文介紹Python中使用xlrd、xlwt、xlutils模塊操作Excel文件的方法,xlrd用于讀取Excel文件,但2.0.0版本后不支持.xlsx格式,xlwt用于創(chuàng)建和寫入Excel文件,而xlutils主要用于復制和處理Excel文件,詳細介紹了如何打開文件、獲取工作表信息、操作行列數(shù)據(jù)和處理日期格式數(shù)據(jù)
    2024-10-10
  • 詳解如何修改jupyter notebook的默認目錄和默認瀏覽器

    詳解如何修改jupyter notebook的默認目錄和默認瀏覽器

    這篇文章主要介紹了詳解如何修改jupyter notebook的默認目錄和默認瀏覽器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • python實現(xiàn)圖像識別的示例代碼

    python實現(xiàn)圖像識別的示例代碼

    這篇文章主要介紹了python實現(xiàn)圖像識別的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python中selenium獲取token的方法

    Python中selenium獲取token的方法

    本文主要介紹了Python中selenium獲取token的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python使用Matlab命令過程解析

    Python使用Matlab命令過程解析

    這篇文章主要介紹了Python使用Matlab命令過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 詳解Python字符串對象的實現(xiàn)

    詳解Python字符串對象的實現(xiàn)

    本文介紹了 python 內(nèi)部是如何管理字符串對象,以及字符串查找操作是如何實現(xiàn)的,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 使用Keras實現(xiàn)簡單線性回歸模型操作

    使用Keras實現(xiàn)簡單線性回歸模型操作

    這篇文章主要介紹了使用Keras實現(xiàn)簡單線性回歸模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 用python制作詞云視頻詳解

    用python制作詞云視頻詳解

    這篇文章主要介紹了用python制作詞云視頻詳解,原理解釋清晰,代碼詳細,用于練習很適合,需要的朋友可以參考下
    2021-04-04
  • Pycharm連接遠程服務器并遠程調(diào)試的全過程

    Pycharm連接遠程服務器并遠程調(diào)試的全過程

    PyCharm 是 JetBrains 開發(fā)的一款 Python 跨平臺編輯器,下面這篇文章主要介紹了Pycharm連接遠程服務器并遠程調(diào)試的全過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2021-06-06

最新評論

沂水县| 田东县| 木里| 澎湖县| 贵德县| 营山县| 青岛市| 广宗县| 汤原县| 韶关市| 辰溪县| 安顺市| 蓬安县| 同仁县| 云龙县| 铜山县| 通辽市| 博爱县| 大新县| 普安县| 安仁县| 绩溪县| 栾城县| 安多县| 蓝山县| 信丰县| 肇东市| 和政县| 天门市| 固阳县| 托里县| 五华县| 巴林右旗| 社会| 个旧市| 德清县| 新营市| 淳化县| 饶阳县| 康定县| 商南县|