inplace的理解
我們平時看到的 nn.ReLU(inplace=True)
、nn.LeakyReLU(inplace=True)
,這些語句中的inplace是什麼意思?
inplace=True
指的是進行原地操作,選擇進行原地覆蓋運算。 比如x+=1
則是對原值x進行操作,然後將得到的結果又直接覆蓋該值。y=x+5,x=y
則不是對x的原地操作。inplace=True
操作的好處就是可以節省運算內存,不用多儲存其他無關變量。- 注意:當使用
inplace=True
後,對於上層網絡傳遞下來的tensor會直接進行修改,改變輸入數據,具體意思如下面例子所示:
Eg. inplace=True操作 會修改輸入數據。
import torch
import torch.nn as nn
relu = nn.ReLU(inplace=True)
input = torch.randn(7)
print("輸入數據:",input)
output = relu(input)
print("ReLU輸出:", output)
print("ReLU處理後,輸入數據:")
print(input)
輸出:
inplace=True means that it will modify the input directly, without allocating any additional output. It can sometimes slightly decrease the memory usage, but may not always be a valid operation (because the original input is destroyed). However, if you don’t see an error, it means that your use case is valid.