pytorch損失反向傳播后梯度為none的問題
錯(cuò)誤代碼:輸出grad為none
a = torch.ones((2, 2), requires_grad=True).to(device) b = a.sum() b.backward() print(a.grad)
由于.to(device)是一次操作,此時(shí)的a已經(jīng)不是葉子節(jié)點(diǎn)了
修改后的代碼為:
a = torch.ones((2, 2), requires_grad=True) c = a.to(device) b = c.sum() b.backward() print(a.grad)
類似錯(cuò)誤:
self.miu = torch.nn.Parameter(torch.ones(self.dimensional)) * 0.01
應(yīng)該為
self.miu = torch.nn.Parameter(torch.ones(self.dimensional) * 0.01)
補(bǔ)充:pytorch梯度返回none的bug
pytorch1.4.0如果使用了view方法,reshape方法
tensor即使設(shè)置了requires_grad,反向傳播之后, x返回沒有g(shù)rad梯度,為none
不知道其他版本有無此bug
補(bǔ)充:PyTorch中梯度反向傳播的注意點(diǎn)
在一個(gè)迭代循環(huán)中
optimizer.zero_grad()語句的位置比較隨意,只要放在loss.backward()前面即可,它的作用是將梯度歸零,否則會在每一個(gè)迭代中進(jìn)行累加,
loss.backward()的作用是反向傳播,計(jì)算梯度,optimizer.step()的功能是優(yōu)化器自動完成參數(shù)的更新。
optimizer.zero_grad() loss.backward() optimizer.step()
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)自動上京東搶手機(jī)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)自動上京東搶手機(jī)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解
這篇文章主要介紹了Python中使用threading.Event協(xié)調(diào)線程的運(yùn)行詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python利用機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)垃圾郵件的識別
今天教大家利用簡單的機(jī)器學(xué)習(xí)算法實(shí)現(xiàn)垃圾郵件識別,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Python 正則表達(dá)式匹配字符串中的http鏈接方法
今天小編就為大家分享一篇Python 正則表達(dá)式匹配字符串中的http鏈接方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python如何在for循環(huán)中同時(shí)使用兩個(gè)變量與兩個(gè)控制條件
Python是一種廣泛使用的編程語言,其提供了許多強(qiáng)大的方法來處理代碼,Python?for循環(huán)是其中一種非常有用的方法,下面這篇文章主要給大家介紹了關(guān)于Python如何在for循環(huán)中同時(shí)使用兩個(gè)變量與兩個(gè)控制條件的相關(guān)資料,需要的朋友可以參考下2024-03-03Django中session進(jìn)行權(quán)限管理的使用
本文主要介紹了Django中session進(jìn)行權(quán)限管理的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07關(guān)于pandas.DataFrame的類SQL操作
這篇文章主要介紹了關(guān)于pandas.DataFrame的類SQL操作方式,具有很好的參考價(jià)值,希望對大家有所幫助,2023-08-08詳細(xì)聊聊為什么Python中0.2+0.1不等于0.3
最近在學(xué)習(xí)過程中發(fā)現(xiàn)在計(jì)算機(jī)JS時(shí)發(fā)現(xiàn)了一個(gè)非常有意思事,0.1+0.2的結(jié)果不是0.3,而是0.30000000000000004,下面這篇文章主要給大家介紹了關(guān)于為什么Python中0.2+0.1不等于0.3的相關(guān)資料,需要的朋友可以參考下2022-12-12