一、資料操作
- 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
#還有常見的內外積等操作,有需要再自行查閱檔案即可
二、自動求梯度
- 自動求梯度
x = torch.ones(2, 2, requires_grad=True) 或
x.requires_grad_(True)
# 假設output是最后輸出的標量
output.backward()
x.grad.data.zero_() #每次反向傳播grad會累積,記得清零,
2.grad_fn
y=x*x*4
print(y.grad_fn)
輸出:<MulBackward object at 0x1100477b8>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/220997.html
標籤:其他
