一文詳解loss.item()用法和注意事項(xiàng)
loss.item()用法
.item()方法是,取一個(gè)元素張量里面的具體元素值并返回該值,可以將一個(gè)零維張量轉(zhuǎn)換成int型或者float型,在計(jì)算loss,accuracy時(shí)常用到。
作用:
1.item()取出張量具體位置的元素元素值
2.并且返回的是該位置元素值的高精度值
3.保持原元素類型不變;必須指定位置4.節(jié)省內(nèi)存(不會(huì)計(jì)入計(jì)算圖)
import torch loss = torch.randn(2, 2) print(loss) print(loss[1,1]) print(loss[1,1].item())
輸出結(jié)果
tensor([[-2.0274, -1.5974],
[-1.4775, 1.9320]])
tensor(1.9320)
1.9319512844085693
其它:
loss = criterion(out, label) loss_sum += loss # <--- 這里
運(yùn)行著就發(fā)現(xiàn)顯存炸了,觀察發(fā)現(xiàn)隨著每個(gè)batch顯存消耗在不斷增大…因?yàn)檩敵龅膌oss的數(shù)據(jù)類型是Variable。PyTorch的動(dòng)態(tài)圖機(jī)制就是通過(guò)Variable來(lái)構(gòu)建圖。主要是使用Variable計(jì)算的時(shí)候,會(huì)記錄下新產(chǎn)生的Variable的運(yùn)算符號(hào),在反向傳播求導(dǎo)的時(shí)候進(jìn)行使用。如果這里直接將loss加起來(lái),系統(tǒng)會(huì)認(rèn)為這里也是計(jì)算圖的一部分,也就是說(shuō)網(wǎng)絡(luò)會(huì)一直延伸變大,那么消耗的顯存也就越來(lái)越大。
正確的loss一般是這樣寫(xiě)
loss_sum += loss.data[0]
其它注意事項(xiàng):
使用loss += loss.detach()來(lái)獲取不需要梯度回傳的部分。
使用loss.item()直接獲得對(duì)應(yīng)的python數(shù)據(jù)類型。
補(bǔ)充閱讀,pytorch 計(jì)算圖
Pytorch的計(jì)算圖由節(jié)點(diǎn)和邊組成,節(jié)點(diǎn)表示張量或者Function,邊表示張量和Function之間的依賴關(guān)系。
Pytorch中的計(jì)算圖是動(dòng)態(tài)圖。這里的動(dòng)態(tài)主要有兩重含義。
第一層含義是:計(jì)算圖的正向傳播是立即執(zhí)行的。無(wú)需等待完整的計(jì)算圖創(chuàng)建完畢,每條語(yǔ)句都會(huì)在計(jì)算圖中動(dòng)態(tài)添加節(jié)點(diǎn)和邊,并立即執(zhí)行正向傳播得到計(jì)算結(jié)果。
第二層含義是:計(jì)算圖在反向傳播后立即銷(xiāo)毀。下次調(diào)用需要重新構(gòu)建計(jì)算圖。如果在程序中使用了backward方法執(zhí)行了反向傳播,或者利用torch.autograd.grad方法計(jì)算了梯度,那么創(chuàng)建的計(jì)算圖會(huì)被立即銷(xiāo)毀,釋放存儲(chǔ)空間,下次調(diào)用需要重新創(chuàng)建。
1,計(jì)算圖的正向傳播是立即執(zhí)行的。
import torch w = torch.tensor([[3.0,1.0]],requires_grad=True) b = torch.tensor([[3.0]],requires_grad=True) X = torch.randn(10,2) Y = torch.randn(10,1) Y_hat = X@w.t() + b # Y_hat定義后其正向傳播被立即執(zhí)行,與其后面的loss創(chuàng)建語(yǔ)句無(wú)關(guān) loss = torch.mean(torch.pow(Y_hat-Y,2)) print(loss.data) print(Y_hat.data)
tensor(17.8969)
tensor([[3.2613],
[4.7322],
[4.5037],
[7.5899],
[7.0973],
[1.3287],
[6.1473],
[1.3492],
[1.3911],
[1.2150]])
2,計(jì)算圖在反向傳播后立即銷(xiāo)毀。
import torch w = torch.tensor([[3.0,1.0]],requires_grad=True) b = torch.tensor([[3.0]],requires_grad=True) X = torch.randn(10,2) Y = torch.randn(10,1) Y_hat = X@w.t() + b # Y_hat定義后其正向傳播被立即執(zhí)行,與其后面的loss創(chuàng)建語(yǔ)句無(wú)關(guān) loss = torch.mean(torch.pow(Y_hat-Y,2)) #計(jì)算圖在反向傳播后立即銷(xiāo)毀,如果需要保留計(jì)算圖, 需要設(shè)置retain_graph = True loss.backward() #loss.backward(retain_graph = True) #loss.backward() #如果再次執(zhí)行反向傳播將報(bào)錯(cuò)
參考鏈接:
- https://www.zhihu.com/question/67209417/answer/344752405
- https://blog.csdn.net/cs111211/article/details/126221102
總結(jié)
到此這篇關(guān)于loss.item()用法和注意事項(xiàng)的文章就介紹到這了,更多相關(guān)loss.item()用法和注意事項(xiàng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django的分頁(yè)器實(shí)例(paginator)
下面小編就為大家分享一篇Django的分頁(yè)器實(shí)例(paginator),具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-12-12Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能
這篇文章主要介紹了Python實(shí)現(xiàn)鼠標(biāo)自動(dòng)在屏幕上隨機(jī)移動(dòng)功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。還等什么?一起跟隨小編過(guò)來(lái)看看吧2020-03-03自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫(kù)remi使用探究
這篇文章主要為大家介紹了自動(dòng)轉(zhuǎn)換Python代碼為HTML界面的GUI庫(kù)remi使用探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01Python+OpenCV實(shí)現(xiàn)圖片及視頻中選定區(qū)域顏色識(shí)別
這篇文章主要為大家詳細(xì)介紹了如何利用Python+OpenCV實(shí)現(xiàn)圖片及視頻中選定區(qū)域顏色識(shí)別功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-07-07詳解Python之?dāng)?shù)據(jù)序列化(json、pickle、shelve)
本篇文章主要介紹了Python之?dāng)?shù)據(jù)序列化,本節(jié)要介紹的就是Python內(nèi)置的幾個(gè)用于進(jìn)行數(shù)據(jù)序列化的模塊,有興趣的可以了解一下。2017-03-03Python PyTorch 如何獲取 MNIST 數(shù)據(jù)
這篇文章主要介紹了Python PyTorch 如何獲取 MNIST 數(shù)據(jù),通過(guò)示例代碼介紹了PyTorch 保存 MNIST 數(shù)據(jù),PyTorch 顯示 MNIST 數(shù)據(jù)的操作方法,感興趣的朋友跟隨小編一起看看吧2024-04-04Python如何計(jì)算兩個(gè)不同類型列表的相似度
在編程中,經(jīng)常需要比較兩個(gè)列表的相似度,尤其是當(dāng)這兩個(gè)列表包含不同類型的元素時(shí),下面小編就來(lái)講講如何使用Python計(jì)算兩個(gè)不同類型列表的相似度吧2025-02-02Tornado源碼分析之HTTP服務(wù)請(qǐng)求解析
這篇文章主要為大家介紹了Tornado源碼分析之HTTP服務(wù)請(qǐng)求解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09詳解PyCharm使用pyQT5進(jìn)行GUI開(kāi)發(fā)的基本流程
本文主要介紹了PyCharm使用pyQT5進(jìn)行GUI開(kāi)發(fā)的基本流程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10