pytorch自動求梯度autograd的實(shí)現(xiàn)
autograd是pytorch構(gòu)建神經(jīng)網(wǎng)絡(luò)的核心。
在 PyTorch 中,結(jié)合以下代碼例子,當(dāng)你對一個張量 x 設(shè)置 requires_grad=True 時(shí),你實(shí)際上是告訴 PyTorch 需要跟蹤所有對這個張量的操作以便未來可以計(jì)算梯度。當(dāng)你調(diào)用 out.backward() 時(shí),PyTorch 會自動計(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) # 這一行會報(bào)錯,因?yàn)?y 不需要梯度,y為非葉子張量
y 是由 x 通過一個簡單的加法操作得到的。由于 y 本身并沒有設(shè)置 requires_grad=True,PyTorch 沒有跟蹤 y 的操作歷史,因此無法計(jì)算 y 關(guān)于 out 的梯度。
如果你想要計(jì)算 y 的梯度,你需要在創(chuàng)建 y 之前也設(shè)置 requires_grad=True。但是,通常情況下,我們不需要對中間變量求梯度,我們只需要對最終輸出的梯度感興趣,然后通過反向傳播計(jì)算出所有需要的梯度。
如果你確實(shí)需要對 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 的梯度了
在這個修改后的代碼中,x 和 y 都設(shè)置了 requires_grad=True,因此 PyTorch 會跟蹤它們所有的操作,你可以計(jì)算 y 關(guān)于 out 的梯度。但是請注意,通常情況下,我們只需要計(jì)算最終輸出(在這個例子中是 out)關(guān)于輸入變量(在這個例子中是 x)的梯度。
到此這篇關(guān)于pytorch自動求梯度autograd的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)pytorch自動求梯度autograd內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python語法學(xué)習(xí)之進(jìn)程間的通信方式
進(jìn)程在創(chuàng)建之后是沒有辦法獲取返回值的,但有的時(shí)候兩個進(jìn)程之間需要進(jìn)行相互之間的配合才能完成工作,這就需要通信的幫助。本文主要介紹了Python中進(jìn)程間的通信方式,需要的可以了解一下2022-04-04
Python爬取動態(tài)網(wǎng)頁中圖片的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于Python爬取動態(tài)網(wǎng)頁中圖片的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
python使用pandas讀寫excel文件的方法實(shí)例
pandas是一個十分強(qiáng)大的數(shù)據(jù)處理工具,最近需要處理數(shù)據(jù)并輸入到excel,簡單列舉它的用法,這篇文章主要給大家介紹了關(guān)于python使用pandas讀寫excel文件的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Python如何實(shí)現(xiàn)對.xls文件表頭的修改
這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)對.xls文件表頭的修改功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03

