Pytorch 快速入門 :從tensorflow轉Pytorch的筆記(gather的用法,待補充...)


從tensorflow轉過來學習Pytorch,對比一下二者的不同:

PyTorch vs TensorFlow,哪個更適合你

為什么要轉Pytorch?

更加靈活(使用tensorflow能夠找到很多別人的代碼,使用Pytorch更加容易實現自己的想法),支持Python化(也就是說基本可以當numpy使用)
速度更快
代碼簡潔容易上手(0.4版本后沒有 Variable之類的定義,只有一個tensor的定義,參數requires_grad=True可以自動求微分,替代Variable)
細節上一些發現

1.以下划線結束的函數是inplace操作,會修改自身的值。

 tensorA.add_(tensorB)  # 會改變tensorA的值

  

2.tensor和numpy很方便互轉且內存共享。

 numpyA = tensorA.numpy()  # Tensor -> Numpy
 tensorA  = torch.from_numpy(numpyA) # Numpy -> Tensor

  

3.只有一個元素的tensor 可以調用tensor.item()直接取元素值。

4.tensor.backward()反向傳播之后,tensor.grad梯度值是累加的,在使用反向傳播之前使用zero_grad()把梯度清0。

5.view()有兩個作用,一是改變tensor的shape,二是讓新tensor和原tensor共享內存,相當於深拷貝detach(),而普通的=賦值方法不會共享內存。

6.resize()是另一種可用來調整size的方法,但與view()不同,如果新維度超過了原維度,會自動分配新的內存空間。

7.增刪維度,None類似於np.newaxis()

 tensor.unsqueeze(n) # 在第n個維度上增加1個維度
 tensor.squeeze(n) # 在第n個維度上壓縮
 tensor.squeeze(1)  # 壓縮所有維數為1的維度

  

8.contiguous()為tensor分配整塊的內存,有些tensor並不是占用一整塊內存,而是由不同的數據塊組成,而tensor的view()操作依賴於內存是整塊的。

9.gather() ??? ???

10.非葉子節點的梯度計算完之后即被清空,可以使用autograd.grad或hook方法獲取非葉子節點的值

常用的庫

神經網絡

torch.nn
nn.Module
nn.functional 

nn.Sequential

  


原文:https://blog.csdn.net/qq_37717661/article/details/85790401


免責聲明!

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



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