Pytorch之認識Variable


Tensor是Pytorch的一個完美組件(可以生成高維數組),但是要構建神經網絡還是遠遠不夠的,我們需要能夠計算圖的Tensor,那就是Variable。Variable是對Tensor的一個封裝,操作和Tensor是一樣的,但是每個Variable都有三個屬性,Varibale的Tensor本身的.data,對應Tensor的梯度.grad,以及這個Variable是通過什么方式得到的.grad_fn。

# 通過一下方式導入Variable
from torch.autograd import Variable
import torch
x_tensor = torch.randn(10,5)
y_tensor = torch.randn(10,5)

#將tensor轉換成Variable
x = Variable(x_tensor,requires_grad=True) #Varibale 默認時不要求梯度的,如果要求梯度,需要說明
y = Variable(y_tensor,requires_grad=True)
z = torch.sum(x + y)
print(z.data)
print(z.grad_fn)

z.backward()
print(x.grad)
print(y.grad)

tensor(7.0406)
<SumBackward0 object at 0x000002A557C47908>
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
上面打印出了z的Tensor數值,以及通過.grad_fn得到其是通過sum這種方式得到的,通過.grad得到了x和y的梯度

#構建一個y = x^2 函數 求x = 2 的導數
import numpy as np
import torch
from torch.autograd import Variable
# 1、畫出函數圖像
import matplotlib.pyplot as plt
x = np.arange(-3,3.01,0.1)
y = x**2
plt.plot(x,y)
plt.plot(2,4,'ro')
plt.show()

#定義點variable類型的x = 2

x = Variable(torch.FloatTensor([2]),requires_grad=True)
y = x ** 2
y.backward()
print(x.grad)






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM