pytorch中的Variable 解析

2021-10-23 16:50:59 字數 1453 閱讀 5356

variable就是變數的意思。實質上也就是可以變化的量,區別於int變數,它是一種可以變化的變數,這正好就符合了反向傳播,引數更新的屬性。

pytorch都是由tensor計算的,而tensor裡面的引數都是variable的形式。如果用variable計算的話,那返回的也是乙個同型別的variable。

舉例說明:

import torch

from torch.autograd import variable # torch 中 variable 模組

tensor = torch.floattensor([[

1,2]

,[3,

4]])

# requires_grad是參不參與誤差反向傳播, 要不要計算梯度

variable = variable(tensor, requires_grad=

true

)print

(tensor)

""" 1 2

3 4[torch.floattensor of size 2x2]

"""print

(variable)

"""variable containing:

1 23 4

[torch.floattensor of size 2x2]

"""

注:tensor不能反向傳播,variable可以反向傳播。

variable計算時,它會逐漸地生成計算圖。這個圖就是將所有的計算節點都連線起來,最後進行誤差反向傳遞的時候,一次性將所有variable裡面的梯度都計算出來,而tensor就沒有這個能力。

variable()中的引數:

1、requires_grad(指定該節點及依賴它的節點是否求導)

variable預設是不需要被求導的,即requires_grad屬性預設為false,如果某乙個節點的requires_grad為true,那麼所有依賴它的節點requires_grad都為true。

2、volatile(指定該節點及依賴它的節點是否不求導)

variable的volatile屬性預設為false,如果某乙個variable的volatile屬性被設為true,那麼所有依賴它的節點volatile屬性都為true。volatile屬性為true的節點不會求導,volatile的優先順序比requires_grad高。

3、retain_graph

多次反向傳播(多層監督)時,梯度是累加的。一般來說,單次反向傳播後,計算圖會free掉,也就是反向傳播的中間快取會被清空【這就是動態度的特點】。為進行多次反向傳播需指定retain_graph=true來儲存這些快取。

4、backward()

反向傳播,求解variable的梯度。放在中間快取中。

Pytorch 中 torchvision的錯誤

在學習pytorch的時候,使用 torchvision的時候發生了乙個小小的問題 安裝都成功了,並且import torch也沒問題,但是在import torchvision的時候,出現了如下所示的錯誤資訊 dll load failed 找不到指定模組。首先,我們得知道torchvision在...

pytorch中的乘法

總結 按元素相乘用torch.mul,二維矩陣乘法用torch.mm,batch二維矩陣用torch.bmm,batch 廣播用torch.matmul if name main a torch.tensor 1 2,3 b torch.arange 0,12 reshape 4 3 c torch...

pytorch中index select 的用法

a torch.linspace 1,12,steps 12 view 3,4 print a b torch.index select a,0,torch.tensor 0,2 print b print a.index select 0,torch.tensor 0,2 c torch.inde...