PyTorch 學習 <1>
1. Pytorch的一些優點:
PyTorch是FaceBook推出的一個深度學習框架。PyTorch有這些特點:① 簡潔:PyTorch設計追求最小的封裝,儘量避免重複造輪子。② 速度:PyTorch的靈活性不以犧牲速度爲代價,並且在許多評測中,PyTorch的速度表現勝於TensorFlow和Keras等框架。③ 易用:PyTorch是所有框架中面向對象設計的最優雅的一個。④ 活躍的社區:PyTorch提供了完整的文檔支持,循序漸進的指南,有着活躍的用戶社區。除了以上一些原因還有 一 些基於本身PyTorch的設計特性-自動求導等。
2. 簡單介紹
張量(Tensor)
Tensor是PyTorch中的一個重要數據結構,可以認爲是一個高維數組。可以是數(標量)、一維數組(向量)、二維數組(矩陣)或者更高維數組。基於張量計算,可以利用GPU並行計算。與python中的numpy數組類似。
In: import torch as t
In: x=t.Tensor(2,2)
x
out:
tensor([[-9.6084e+28, 4.5752e-41],
[ 7.3476e+18, 3.0925e-41]])
In: # Tensor與numpy之間簡單的轉換
In: a=t.Tensor(5)
In: a
Out: tensor([-9.6084e+28, 4.5752e-41, 1.8284e+19, 3.0925e-41, 1.4013e-45])
In [26]: b=a.numpy() #Tensor轉換成numpy
In [27]: b
Out[27]:
array([-9.6084442e+28, 4.5752395e-41, 1.8283541e+19, 3.0925256e-41,
1.4012985e-45], dtype=float32)
# numpy 轉換爲Tensor
In [28]: import numpy as np
In [29]: c=np.ones(5)
In [30]: c
Out[30]: array([1., 1., 1., 1., 1.])
In [31]: d=t.from_numpy(c)
In [32]: d
Out[32]: tensor([1., 1., 1., 1., 1.], dtype=torch.float64)
3. Autograd:自動微分
Deep learning 的本質是通過反向傳播算法進反向求導,然後不斷調整參數,使得模型學習到更優的參數以求得到更好的結果。其中在PyTorch中有autograd實現了這個功能。在tensor上所有操作,Autograd都能爲他們自動提供微分,從而避免手動求導的複雜過程。
autograd.Variable是Autograd中的核心類,它簡單封裝了Tensor,並且支持所有的Tensor操作。Tensor被封裝成variable後,可以調用它的.backward實現反向傳播,自動計算所有梯度。
In [34]: from torch.autograd import Variable
In [35]: X=Variable(t.ones(2,2),requires_grad=True) #使用Tensor創建一個Variable
In [36]: x
Out[36]:
tensor([[-9.6084e+28, 4.5752e-41],
[ 7.3476e+18, 3.0925e-41]])
更多細節或者具體操作可以查看PyTorch官方操作手冊:https://pytorch-cn.readthedocs.io/zh/latest/