Variable怎么在Pytorch中使用?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
在成都做網(wǎng)站、成都網(wǎng)站設(shè)計中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報的無錫營銷推廣。創(chuàng)新互聯(lián)建站專業(yè)成都網(wǎng)站建設(shè)10多年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。1.簡介
torch.autograd.Variable是Autograd的核心類,它封裝了Tensor,并整合了反向傳播的相關(guān)實現(xiàn)
Variable和tensor的區(qū)別和聯(lián)系
Variable是籃子,而tensor是雞蛋,雞蛋應(yīng)該放在籃子里才能方便拿走(定義variable時一個參數(shù)就是tensor)
Variable這個籃子里除了裝了tensor外還有requires_grad參數(shù),表示是否需要對其求導(dǎo),默認為False
Variable這個籃子呢,自身有一些屬性
比如grad,梯度variable.grad是d(y)/d(variable)保存的是變量y對variable變量的梯度值,如果requires_grad參數(shù)為False,所以variable.grad返回值為None,如果為True,返回值就為對variable的梯度值
比如grad_fn,對于用戶自己創(chuàng)建的變量(Variable())grad_fn是為none的,也就是不能調(diào)用backward函數(shù),但對于由計算生成的變量,如果存在一個生成中間變量的requires_grad為true,那其的grad_fn不為none,反則為none
比如data,這個就很簡單,這個屬性就是裝的雞蛋(tensor)
Varibale包含三個屬性:
data:存儲了Tensor,是本體的數(shù)據(jù) grad:保存了data的梯度,本事是個Variable而非Tensor,與data形狀一致 grad_fn:指向Function對象,用于反向傳播的梯度計算之用
代碼1
import numpy as np import torch from torch.autograd import Variable x = Variable(torch.ones(2,2),requires_grad = False) temp = Variable(torch.zeros(2,2),requires_grad = True) y = x + temp + 2 y = y.mean() #求平均數(shù) y.backward() #反向傳遞函數(shù),用于求y對前面的變量(x)的梯度 print(x.grad) # d(y)/d(x)
輸出1
none
(因為requires_grad=False)
代碼2
import numpy as np import torch from torch.autograd import Variable x = Variable(torch.ones(2,2),requires_grad = False) temp = Variable(torch.zeros(2,2),requires_grad = True) y = x + temp + 2 y = y.mean() #求平均數(shù) y.backward() #反向傳遞函數(shù),用于求y對前面的變量(x)的梯度 print(temp.grad) # d(y)/d(temp)
輸出2
tensor([[0.2500, 0.2500],
[0.2500, 0.2500]])
代碼3
import numpy as np import torch from torch.autograd import Variable x = Variable(torch.ones(2,2),requires_grad = False) temp = Variable(torch.zeros(2,2),requires_grad = True) y = x + 2 y = y.mean() #求平均數(shù) y.backward() #反向傳遞函數(shù),用于求y對前面的變量(x)的梯度 print(x.grad) # d(y)/d(x)
輸出3
Traceback (most recent call last):
File "path", line 12, in
y.backward()
(報錯了,因為生成變量y的中間變量只有x,而x的requires_grad是False,所以y的grad_fn是none)
代碼4
import numpy as np import torch from torch.autograd import Variable x = Variable(torch.ones(2,2),requires_grad = False) temp = Variable(torch.zeros(2,2),requires_grad = True) y = x + 2 y = y.mean() #求平均數(shù) #y.backward() #反向傳遞函數(shù),用于求y對前面的變量(x)的梯度 print(y.grad_fn) # d(y)/d(x)
輸出4
none
2.grad屬性
在每次backward后,grad值是會累加的,所以利用BP算法,每次迭代是需要將grad清零的。
x.grad.data.zero_()
(in-place操作需要加上_,即zero_)
看完上述內(nèi)容,你們掌握Variable怎么在Pytorch中使用的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!