簡單介紹PyTorch中in-place operation的含義

大雄45發表於2020-07-09
這篇文章主要介紹了淺談PyTorch中in-place operation的含義,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

in-place operation在pytorch中是指改變一個tensor的值的時候,不經過複製操作,而是直接在原來的記憶體上改變它的值。可以把它成為原地運算子。

在pytorch中經常加字尾“_”來代表原地in-place operation,比如說.add_() 或者.scatter()。python裡面的+=,*=也是in-place operation。

下面是正常的加操作,執行結束加操作之後x的值沒有發生變化:

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])

下面是原地操作,執行之後改變了原來變數的值:

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而沒有報錯的話,那麼你可以確定你的梯度計算是正確的。

補充知識:PyTorch中nn.ReLU(inplace=True)中inplace的作用

我們用PyTorch搭建神經網路時,會遇到nn.ReLU(inplace=True),inplace=True是什麼意思呢?

nn.Conv2d(64,192,kernel_size=3,stride=1,padding=1),
nn.ReLu(inpalce=True),# inplace為True,預設為False

意思是:是否將計算得到的值直接覆蓋之前的值

例如:x = x+1

即對原值x進行+1操作後得到的值,直接賦值給x

而不是如下找一箇中間變數y:

y=x+1
x=y

先將x進行+1操作後賦值給中間變數y,然後將y值賦給x

這樣就需要記憶體儲存變數y

因此當inplace=True時:

就是對從上層網路nn.Conv2d中傳遞下來的tensor直接進行修改,這樣能夠節省運算記憶體,不用多儲存其他變數。

以上這篇淺談PyTorch中in-place operation的含義就是小編分享給大家的全部內容了,希望能給大家一個參考。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2703597/,如需轉載,請註明出處,否則將追究法律責任。

相關文章