pytorch自動(dòng)求梯度autograd的實(shí)現(xiàn)
autograd是pytorch構(gòu)建神經(jīng)網(wǎng)絡(luò)的核心。
在 PyTorch 中,結(jié)合以下代碼例子,當(dāng)你對(duì)一個(gè)張量 x 設(shè)置 requires_grad=True 時(shí),你實(shí)際上是告訴 PyTorch 需要跟蹤所有對(duì)這個(gè)張量的操作以便未來可以計(jì)算梯度。當(dāng)你調(diào)用 out.backward() 時(shí),PyTorch 會(huì)自動(dòng)計(jì)算關(guān)于 out 的梯度,并逆向傳播回 x。
在以下代碼中:
x = torch.ones(2,2) print(x) x.requires_grad=True print(x) y = x + 2 z = y*y*3 out = z.mean() print(out) out.backward() print(x.grad) print(y.grad) # 這一行會(huì)報(bào)錯(cuò),因?yàn)?y 不需要梯度,y為非葉子張量
y 是由 x 通過一個(gè)簡單的加法操作得到的。由于 y 本身并沒有設(shè)置 requires_grad=True,PyTorch 沒有跟蹤 y 的操作歷史,因此無法計(jì)算 y 關(guān)于 out 的梯度。
如果你想要計(jì)算 y 的梯度,你需要在創(chuàng)建 y 之前也設(shè)置 requires_grad=True。但是,通常情況下,我們不需要對(duì)中間變量求梯度,我們只需要對(duì)最終輸出的梯度感興趣,然后通過反向傳播計(jì)算出所有需要的梯度。
如果你確實(shí)需要對(duì) y 求梯度,可以這樣做:
x = torch.ones(2,2, requires_grad=True) y = x + 2 z = y*y*3 out = z.mean() out.backward() print(x.grad) # 計(jì)算 x 的梯度 print(y.grad) # 現(xiàn)在可以計(jì)算 y 的梯度了
在這個(gè)修改后的代碼中,x 和 y 都設(shè)置了 requires_grad=True,因此 PyTorch 會(huì)跟蹤它們所有的操作,你可以計(jì)算 y 關(guān)于 out 的梯度。但是請(qǐng)注意,通常情況下,我們只需要計(jì)算最終輸出(在這個(gè)例子中是 out)關(guān)于輸入變量(在這個(gè)例子中是 x)的梯度。
到此這篇關(guān)于pytorch自動(dòng)求梯度autograd的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pytorch自動(dòng)求梯度autograd內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實(shí)現(xiàn)Windows下設(shè)置定時(shí)任務(wù)來運(yùn)行python腳本
這篇文章主要介紹了實(shí)現(xiàn)Windows下設(shè)置定時(shí)任務(wù)來運(yùn)行python腳本的完整過程,有需要的朋友可以借鑒參考下,希望對(duì)廣大讀者朋友能夠有所幫助2021-09-09Python列表pop()函數(shù)使用實(shí)例詳解
這篇文章主要介紹了Python列表pop()函數(shù)使用實(shí)例詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07Python redis操作實(shí)例分析【連接、管道、發(fā)布和訂閱等】
這篇文章主要介紹了Python redis操作,結(jié)合實(shí)例形式分析了Python redis的連接、管道、發(fā)布和訂閱等相關(guān)概念、原理及操作技巧,需要的朋友可以參考下2019-05-05Python3 字典dictionary入門基礎(chǔ)附實(shí)例
Python字典是另一種可變?nèi)萜髂P?,且可存?chǔ)任意類型對(duì)象,如字符串、數(shù)字、元組等其他容器模型,字典由鍵和對(duì)應(yīng)值成對(duì)組成,字典也被稱作關(guān)聯(lián)數(shù)組或哈希表2020-02-02詳解Python 重學(xué)requests發(fā)起請(qǐng)求的基本方式
這篇文章主要介紹了詳解Python 重學(xué)requests發(fā)起請(qǐng)求的基本方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02詳解Django-channels 實(shí)現(xiàn)WebSocket實(shí)例
這篇文章主要介紹了詳解Django-channels實(shí)現(xiàn)WebSocket實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08如何使用Python實(shí)現(xiàn)斐波那契數(shù)列
這篇文章主要介紹了如何使用Python實(shí)現(xiàn)斐波那契數(shù)列,斐波那契數(shù)列(Fibonacci)最早由印度數(shù)學(xué)家Gopala提出,而第一個(gè)真正研究斐波那契數(shù)列的是意大利數(shù)學(xué)家 Leonardo Fibonacci,需要的朋友可以參考下2019-07-07Python-OpenCV實(shí)戰(zhàn):利用 KNN 算法識(shí)別手寫數(shù)字
K-最近鄰(KNN)是監(jiān)督學(xué)習(xí)中最簡單的算法之一,KNN可用于分類和回歸問題。本文將為大家介紹的是通過KNN算法實(shí)現(xiàn)識(shí)別手寫數(shù)字。文中的示例代碼介紹詳細(xì),需要的朋友可以參考一下2021-12-12