PyTorch學習:Variable

tensor 是 PyTorch 中的完美組件,但是構建神經網絡還遠遠不夠,我們需要能夠構建計算圖的 tensor,這就是 Variable。Variable 是對 tensor 的封裝,操作和 tensor 是一樣的,但是每個 Variabel都有三個屬性,Variable 中的 tensor本身`.data`,對應 tensor 的梯度`.grad`以及這個 Variable 是通過什麼方式得到的`.grad_fn`

import torch
import numpy as np
# 通過下面這種方式導入 Variable
from torch.autograd import Variable
x_tensor = torch.randn(10, 5)
y_tensor = torch.randn(10, 5)
# 將 tensor 變成 Variable
x = Variable(x_tensor, requires_grad=True) # 默認 Variable 是不需要求梯度的,所以我們用這個方式申明需要對其進行求梯度
y = Variable(y_tensor, requires_grad=True)
z = torch.sum(x + y)
print(z.data)
print(z.grad_fn)

tensor(5.1091)
<SumBackward0 object at 0x7fcb7d0db860>

上面我們打出了 z 中的 tensor 數值,同時通過grad_fn知道了其是通過 Sum 這種方式得到的

# 求 x 和 y 的梯度
z.backward()
print(x.grad)
print(y.grad)

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.]])

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()

 

# 答案
x = Variable(torch.FloatTensor([2]), requires_grad=True)
# print("x:",x.numpy_())
y = x ** 2
y.backward()
print(x.grad)

tensor([ 4.])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章