第二章 tensor和梯度計算

1、數據操做
  1. tensor
(1)建立
torch.tensor([888,444])     #直接建立值爲[888,444]的張量
torch.empty(2,4)      #2x4的空張量
torch.rand(2,4)       #隨機初始化2x4的張量
torch.zeros(2,4,dtype = torch.long)    #初始值所有爲0的long型的張量
torch.randn_like(x,dtype=torch.float)   #根據現有的x的形狀建立新的tensor,並指定新的數據類型

(2)獲取形狀(x爲一個張量)
x.shape    或
x.size()

(3)加法(x,y爲張量)
x+y    或
torch.add(x,y)
torch.add(x,y,out=result)   #指定result爲計算的結果
y.add_(x)      #此爲inplace方法,結果存在y中
               # 通常inplace方法都有後綴_

(4)索引
x=torch.tensor([[1,2,3,4,5],
		   	    [2,2,2,2,2],
		   	    [3,3,3,3,3],
		   	    [4,4,4,4,4]])
y=x[1,:]       #獲得的y爲([2,2,2,2,2])
               #注意此處y和x共享內存,改變y會致使x中對應的值也發生改變
(5)改變形狀
x.view(2,10)     #x改成2x10的張量
x.view(1,-1)     #x改成1x20的張量,其中-1至關於未知數,會自動計算出其值,此處爲20/1=20

(6)產生不共享內存副本
y=x.clone()      #clone後梯度回傳到y時會同時傳到源張量x

(7)和numpy的轉換
x.numpy()  #轉爲numpy
torch.from_numpy(x)   # 轉爲tensor
z=torch.tensor(y)            # 此方法較爲常見,但須注意此時的y和z不共享內存

(8)其餘
x.item()        #x從tensor型轉化爲一個number
#還有常見的內外積等操做,有須要再自行查閱文檔便可
2、自動求梯度
  1. 自動求梯度
x = torch.ones(2, 2, requires_grad=True) 或
x.requires_grad_(True)

# 假設output是最後輸出的標量
output.backward()

x.grad.data.zero_() #每次反向傳播grad會累積,記得清零。

2.grad_fnui

y=x*x*4
print(y.grad_fn)
輸出:<MulBackward object at 0x1100477b8>
相關文章
相關標籤/搜索