pytorch基础函数学习
? ? ? 深度學(xué)習(xí)框架,似乎永遠離不開哪個最熱哪個最實用的話題,自己接觸甚淺,尚不敢對齊進行大加評論,這里也只是初步接觸。目前常見的有TensorFlow,pytorch,Keras等,至于目前哪個做好用,就像TIOBE編程語言的統(tǒng)計一樣,每一個都有自己的擁躉。目前Tensorflow和pytorch競爭相當火爆,pytorch上升速度極快,至于是否真正超過了TesorFlow了,可以通過這篇博文進行了解。
? ? 安裝自不必細說,參考安裝教程,同時官網(wǎng)了提供相應(yīng)的內(nèi)容。
使用Tensorflow配和使用Numpy,Numpy提供了強大的數(shù)組和矩陣的功能,二者的區(qū)別引用一位他人的總結(jié)就是:“一個好的框架應(yīng)該要具備三點:對大的計算圖能方便的實現(xiàn);能自動求變量的導(dǎo)數(shù);能簡單的運行在GPU上;pytorch都做到了,但是現(xiàn)在很多公司用的都是TensorFlow,而pytorch由于比較靈活,在學(xué)術(shù)科研上用得比較多一點。鄙人認為可能,Google可能下手早一些,而Facebook作后來者,雖然靈活,但是很多公司已經(jīng)入了TensorFlow的坑了,要全部遷移出來還是很費功夫;而且,TensorFlow在GPU的分布式計算上更為出色,在數(shù)據(jù)量巨大時效率比pytorch要高一些,這個也是一個重要的原因吧。”,因此pytorch一些函數(shù)方法和numpy中的函數(shù)方法說幾乎等同也不為過。下面先看一下Numpy中的幾個方法
import numpy as np a = np.array([[1, 2], [3, 4]]) #創(chuàng)建空矩陣.數(shù)組 numpy.empty(shape, dtype = float, order = 'C') #創(chuàng)建全0矩陣 numpy.zeros(shape, dtype = float, order = 'C') #創(chuàng)建指定范圍的數(shù)組 numpy.arange(start, stop, step, dtype)1.張量Tesnors
? ? ? 我們知道深度學(xué)習(xí)中,Tensorflow和pytorch等都是基于對數(shù)組矩陣進行大量的擬合,變換,微分等運算,因此張量是線性代數(shù)中用到的一種數(shù)據(jù)結(jié)構(gòu),類似向量和矩陣,可以在張量上進行算術(shù)運算。張量可以說是Tensorflow和pytorch的基石。
Tensors 類似于 NumPy 的 ndarrays ,同時 Tensors 可以使用 GPU 進行計算。使用tensor之前先導(dǎo)入torch
| torch.is_tensor(obj) | 如果 obj 是一個 pytorch tensor, 則返回True. |
| torch.is_storage(obj) | 如果 obj 是一個 pytorch storage object, 則返回True |
| torch.numel(input) → int | 返回 input Tensor 中的元素總數(shù) |
2.創(chuàng)建函數(shù)
創(chuàng)建函數(shù)和Numpy中的幾乎完全一樣,包括常見的ones,zeros,eye,arrange等
| torch.zeros(*sizes, out=None) → Tensor | 返回填充了標量值為 0 的 Tensor, 其形狀由可變參量 sizes 定義 |
返回一個全0 的張量,其形狀有sizes定義
x = torch.zeros(5,dtype=torch.long) print(x) x = torch.zeros((5,3),dtype=torch.long) print(x) x = torch.zeros([5,3],dtype=torch.long) print(x)| torch.zeros_like(input, out=None) → Tensor | 返回一個用標量值 0 填充的 Tensor, 其大小與 input 相同. |
還有一個常用函數(shù)同zeros,就是zeros_like,見名知著,顧名思義就是像什么一樣的一個功能函數(shù)
x = torch.zeros((5,3),dtype=torch.long) print(x) y = torch.zeros_like(x) print(y)| torch.from_numpy(ndarray) → Tensor | 從 numpy.ndarray 類 創(chuàng)建一個 Tensor 類 |
注意:將numpy.ndarray轉(zhuǎn)換為Tensor,返回的張量tensor和numpy的ndarray共享同一內(nèi)存空間,修改一個會導(dǎo)致另一個也被修改,返回的張量不能改變大小
| torch.eye(n, m=None, out=None) | 返回對角線位置全為1, 其它位置全為0的二維 tensor |
返回一個2維張量,對角線為1,其它位置為0,注意:eye(N)是單位矩陣,非全1矩陣
- n (int) -行數(shù)
- m (int, optional)列數(shù),如果為None,則默認為n
- out (Tensor, optional)
| torch.empty() | ? |
| torch.empty_like() |
這里的創(chuàng)建規(guī)則同ones和ones_like一樣
x = torch.empty(5,3) y = torch.empty_like(x) print(y)| torch.full(size, fill_value, …) | 返回大小為sizes,單位值為fill_value的矩陣 |
| torch.full_like(input, fill_value, …) | 返回與input相同size,單位值為fill_value的矩陣 |
輸出結(jié)果為如下:
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]]) tensor(1.) tensor([1.])還有一些其他函數(shù)比如等比,等差數(shù)列比較好理解
| torch.linspace(start, end, steps=100, out=None) → Tensor | 返回 start 和 end 之間等間隔 steps 點的一維 Tensor.輸出 是尺寸 steps 為一維 tensor |
| torch.logspace(start, end, steps=100, out=None) → Tensor | 返回一個在 10^start和 10^end之間的對數(shù)間隔 steps 點的一維 Tensor,輸出是長度為 steps 的一維 tensor |
生成一維Tensor有arrage和range兩個函數(shù)
| torch.arange(start=0, end, step=1, out=None) → Tensor | 從 start 用步長為 step 開始, 間隔在 [start, end) 中的值返回大小層次為 floor((end?start)/step)floor((end?start)/step) 的一維 Tensor. |
| torch.range(start, end, step=1, out=None) → Tensor | 返回一個在 start 到 end 并且步長為 step 的區(qū)間內(nèi), 大小為 floor((end?start)/step)+1floor((end?start)/step)+1 為一維 Tensor. |
推薦使用torch.arrange()
3. 索引,切片,連接,換位(Index, Slicing, Joining, Mutating)
| torch.cat(seq, dim=0, out=None) → Tensor | 在給定維度上對輸入的張量序列 seq 進行連接操作. 所有張量必須具有相同的形狀(在 cat 維度中除外) 或為空. |
| torch.chunk(tensor, chunks, dim=0) | 在給定維度(軸)上將輸入張量進行分塊處理. |
| torch.gather(input, dim, index, out=None) → Tensor | 沿給定軸 dim ,將輸入索引張量 index 指定位置的值進行聚合. |
?
關(guān)于基礎(chǔ)函數(shù)的介紹,推薦自己看過的兩篇文章,一個是羅列了所有可用的函數(shù),另一個是介紹了基本功能,示例
總結(jié)
以上是生活随笔為你收集整理的pytorch基础函数学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python之collections容器
- 下一篇: JMeter初探-安装与使用