Pytorch 使用cuda進(jìn)行自動(dòng)求導(dǎo)出現(xiàn)的幺蛾子

首先我們來簡單地舉個(gè)pytorch自動(dòng)求導(dǎo)的例子:

x = torch.randn(3)
x = Variable(x, requires_grad = True)
y = x * 2
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
x.grad

在Ipython中會直接顯示x.grad的值

Variable containing:
 0.2000
 2.0000
 0.0002
[torch.FloatTensor of size 3]

怎么樣,是不是很Easy?

那我們來試一下使用cuda吧

將代碼簡單改動(dòng),就是將x轉(zhuǎn)化為cuda變量

x = torch.randn(3)
x = Variable(x, requires_grad = True)
x = x.cuda() # 需要你的計(jì)算機(jī)有GPU
y = x * 2
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
x.grad

我們來顯示一下,

print(x.grad)
None

驚不驚喜,意不意外?
問題出在第三行,cuda的定義要在Variable變量的定義之前,不然第3行會把requires_grad這個(gè)bool 搞成False。心好累
改成下邊這樣子就可以了

x = torch.randn(3)
x = Variable(x.cuda(), requires_grad = True)
#x = x.cuda() # 需要你的計(jì)算機(jī)有GPU
y = x * 2
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
x.grad
Variable containing:
 0.2000
 2.0000
 0.0002
[torch.FloatTensor of size 3]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容