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、自動求梯度
- 自動求梯度
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>