淺談PyTorch中in-place operation的含義
in-place operation在pytorch中是指改變一個(gè)tensor的值的時(shí)候,不經(jīng)過復(fù)制操作,而是直接在原來的內(nèi)存上改變它的值??梢园阉蔀樵夭僮鞣?。
在pytorch中經(jīng)常加后綴“_”來代表原地in-place operation,比如說.add_() 或者.scatter()。python里面的+=,*=也是in-place operation。
下面是正常的加操作,執(zhí)行結(jié)束加操作之后x的值沒有發(fā)生變化:
import torch x=torch.rand(2) #tensor([0.8284, 0.5539]) print(x) y=torch.rand(2) print(x+y) #tensor([1.0250, 0.7891]) print(x) #tensor([0.8284, 0.5539])
下面是原地操作,執(zhí)行之后改變了原來變量的值:
import torch x=torch.rand(2) #tensor([0.8284, 0.5539]) print(x) y=torch.rand(2) x.add_(y) print(x) #tensor([1.1610, 1.3789])
在官方問文檔中由這一段話:
如果你使用了in-place operation而沒有報(bào)錯(cuò)的話,那么你可以確定你的梯度計(jì)算是正確的。
補(bǔ)充知識:PyTorch中nn.ReLU(inplace=True)中inplace的作用
我們用PyTorch搭建神經(jīng)網(wǎng)絡(luò)時(shí),會遇到nn.ReLU(inplace=True),inplace=True是什么意思呢?
nn.Conv2d(64,192,kernel_size=3,stride=1,padding=1),
nn.ReLu(inpalce=True),# inplace為True,默認(rèn)為False
意思是:是否將計(jì)算得到的值直接覆蓋之前的值
例如:x = x+1
即對原值x進(jìn)行+1操作后得到的值,直接賦值給x
而不是如下找一個(gè)中間變量y:
y=x+1
x=y
先將x進(jìn)行+1操作后賦值給中間變量y,然后將y值賦給x
這樣就需要內(nèi)存存儲變量y
因此當(dāng)inplace=True時(shí):
就是對從上層網(wǎng)絡(luò)nn.Conv2d中傳遞下來的tensor直接進(jìn)行修改,這樣能夠節(jié)省運(yùn)算內(nèi)存,不用多存儲其他變量。
以上這篇淺談PyTorch中in-place operation的含義就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
django實(shí)現(xiàn)類似觸發(fā)器的功能
今天小編就為大家分享一篇django實(shí)現(xiàn)類似觸發(fā)器的功能,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11使用AJAX和Django獲取數(shù)據(jù)的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于使用AJAX和Django獲取數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Python XlsxWriter模塊Chart類用法實(shí)例分析
這篇文章主要介紹了Python XlsxWriter模塊Chart類用法,結(jié)合實(shí)例形式分析了Python XlsxWriter模塊Chart類功能、圖表繪制常用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-03-03Pandas實(shí)現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的一些小技巧匯總
這篇文章主要給大家匯總介紹了關(guān)于Pandas實(shí)現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的一些小技巧,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05