您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了PyTorch中torch.tensor和torch.Tensor有什么區別,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。
眾所周知,numpy作為Python中數據分析的專業第三方庫,比Python自帶的Math庫速度更快。同樣的,在PyTorch中,有一個類似于numpy的庫,稱為Tensor。Tensor自稱為神經網絡界的numpy。
一、numpy和Tensor二者對比
對比項 | numpy | Tensor |
相同點 | 可以定義多維數組,進行切片、改變維度、數學運算等 | 可以定義多維數組,進行切片、改變維度、數學運算等 |
不同點 | 1、產生的數組類型為numpy.ndarray; 2、會將ndarray放入CPU中進行運算; 3、導入方式為import numpy as np,后續通過np.array([1,2])建立數組; 4、numpy中沒有x.type()的用法,只能使用type(x)。 | 1、產生的數組類型為torch.Tensor; 2、會將tensor放入GPU中進行加速運算(如果有GPU); 3、導入方式為import torch,后續通過torch.tensor([1,2])或torch.Tensor([1,2])建立數組; 4、Tensor中查看數組類型既可以使用type(x),也可以使用x.type()。但是更加推薦采用x.type(),具體原因詳見下文。 |
舉例(以下代碼均在Jupyter Notebook上運行且通過):
numpy:
import numpy as np x = np.array([1,2]) #之所以這么寫,是為了告訴大家,在Jupyter Notebook中,是否帶有print()函數打印出來的效果是不一樣的~ x #array([1, 2]) print(x) #[1 2] type(x) #numpy.ndarray print(type(x)) #<class 'numpy.ndarray'> #注意:numpy中沒有x.type()的用法,只能使用type(x)!!!
Tensor:
import torch #注意,這里是import torch,不是import Tensor!!! x = torch.tensor([1,2]) x #tensor([1, 2]) print(x) #tensor([1, 2]),注意,這里與numpy就不一樣了! type(x) #torch.Tensor print(type(x)) #<class 'torch.Tensor'> x.type() #'torch.LongTensor',注意:numpy中不可以這么寫,會報錯!!! print(x.type()) #torch.LongTensor,注意:numpy中不可以這么寫,會報錯!!!
numpy與Tensor在使用上還有其他差別。由于不是本文的重點,故暫不詳述。后續可能會更新~
二、torch.tensor與torch.Tensor的區別
細心的讀者可能注意到了,通過Tensor建立數組有torch.tensor([1,2])或torch.Tensor([1,2])兩種方式。那么,這兩種方式有什么區別呢?
(1)torch.tensor是從數據中推斷數據類型,而torch.Tensor是torch.empty(會隨機產生垃圾數組,詳見實例)和torch.tensor之間的一種混合。但是,當傳入數據時,torch.Tensor使用全局默認dtype(FloatTensor);
(2)torch.tensor(1)返回一個固定值1,而torch.Tensor(1)返回一個大小為1的張量,它是初始化的隨機值。
import torch #注意,這里是import torch,不是import Tensor!!! x = torch.tensor([1,2]) x #tensor([1, 2]) print(x) #tensor([1, 2]),注意,這里與numpy就不一樣了! type(x) #torch.Tensor print(type(x)) #<class 'torch.Tensor'> x.type() #'torch.LongTensor',注意:numpy中不可以這么寫,會報錯!!! print(x.type()) #torch.LongTensor,注意:numpy中不可以這么寫,會報錯!!! y = torch.Tensor([1,2]) y #tensor([1., 2.]),因為torch.Tensor使用全局默認dtype(FloatTensor) print(y) #tensor([1., 2.]),因為torch.Tensor使用全局默認dtype(FloatTensor) type(y) #torch.Tensor print(type(y)) #<class 'torch.Tensor'> y.type() #'torch.FloatTensor',注意:這里就與上面不一樣了!tensor->LongTensor,Tensor->FloatTensor!!! print(y.type()) #torch.FloatTensor,注意:這里就與上面不一樣了!tensor->LongTensor,Tensor->FloatTensor!!! z = torch.empty([1,2]) z #隨機運行兩次,結果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]]) print(z) #隨機運行兩次,結果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]]) type(z) #torch.Tensor print(type(z)) #<class 'torch.Tensor'> z.type() #'torch.FloatTensor',注意:empty()默認為torch.FloatTensor而不是torch.LongTensor print(z.type()) #torch.FloatTensor,注意:empty()默認為torch.FloatTensor而不是torch.LongTensor #torch.tensor(1)、torch.Tensor(1)和torch.empty(1)的對比: t1 = torch.tensor(1) t2 = torch.Tensor(1) t3 = torch.empty(1) t1 #tensor(1) print(t1) #tensor(1) type(t1) #torch.Tensor print(type(t1)) #<class 'torch.Tensor'> t1.type() #'torch.LongTenso' print(t1.type()) #torch.LongTensor t2 #隨機運行兩次,結果不同:tensor([2.8026e-45]),tensor([0.]) print(t2) #隨機運行兩次,結果不同:tensor([2.8026e-45]),tensor([0.]) type(t2) #torch.Tensor print(type(t2)) #<class 'torch.Tensor'> t2.type() #'torch.FloatTensor' print(t2.type()) #torch.FloatTensor t3 #隨機運行兩次,結果不同:tensor([0.]),tensor([1.4013e-45]) print(t3) #隨機運行兩次,結果不同:tensor([0.]),tensor([1.4013e-45]) type(t3) #torch.Tensor print(type(t3)) #<class 'torch.Tensor'> t3.type() #'torch.FloatTensor' print(t3.type()) #torch.FloatTensor
上文提到過,對于Tensor,更推薦采用x.type()來查看數據類型。是因為x.type()的輸出結果為'torch.LongTensor'或'torch.FloatTensor',可以看出兩個數組的種類區別。而采用type(x),則清一色的輸出結果都是torch.Tensor,無法體現類型區別。
PyTorch是個神奇的工具,其中的Tensor用法要遠比numpy豐富。大家可以在練習中多多總結,逐漸提高~
以上就是關于PyTorch中torch.tensor和torch.Tensor有什么區別的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。