溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PyTorch中torch.tensor和torch.Tensor有什么區(qū)別

發(fā)布時間:2020-07-23 16:06:01 來源:億速云 閱讀:413 作者:小豬 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了PyTorch中torch.tensor和torch.Tensor有什么區(qū)別,內(nèi)容簡而易懂,希望大家可以學(xué)習(xí)一下,學(xué)習(xí)完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

眾所周知,numpy作為Python中數(shù)據(jù)分析的專業(yè)第三方庫,比Python自帶的Math庫速度更快。同樣的,在PyTorch中,有一個類似于numpy的庫,稱為Tensor。Tensor自稱為神經(jīng)網(wǎng)絡(luò)界的numpy。

一、numpy和Tensor二者對比

對比項numpyTensor
相同點可以定義多維數(shù)組,進行切片、改變維度、數(shù)學(xué)運算等可以定義多維數(shù)組,進行切片、改變維度、數(shù)學(xué)運算等
不同點

1、產(chǎn)生的數(shù)組類型為numpy.ndarray;

2、會將ndarray放入CPU中進行運算;

3、導(dǎo)入方式為import numpy as np,后續(xù)通過np.array([1,2])建立數(shù)組;

4、numpy中沒有x.type()的用法,只能使用type(x)。

1、產(chǎn)生的數(shù)組類型為torch.Tensor;

2、會將tensor放入GPU中進行加速運算(如果有GPU);

3、導(dǎo)入方式為import torch,后續(xù)通過torch.tensor([1,2])或torch.Tensor([1,2])建立數(shù)組;

4、Tensor中查看數(shù)組類型既可以使用type(x),也可以使用x.type()。但是更加推薦采用x.type(),具體原因詳見下文。

 舉例(以下代碼均在Jupyter Notebook上運行且通過):

numpy:

import numpy as np 
x = np.array([1,2]) 
#之所以這么寫,是為了告訴大家,在Jupyter Notebook中,是否帶有print()函數(shù)打印出來的效果是不一樣的~ 
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在使用上還有其他差別。由于不是本文的重點,故暫不詳述。后續(xù)可能會更新~    

二、torch.tensor與torch.Tensor的區(qū)別

        細(xì)心的讀者可能注意到了,通過Tensor建立數(shù)組有torch.tensor([1,2])或torch.Tensor([1,2])兩種方式。那么,這兩種方式有什么區(qū)別呢?

        (1)torch.tensor是從數(shù)據(jù)中推斷數(shù)據(jù)類型,而torch.Tensor是torch.empty(會隨機產(chǎn)生垃圾數(shù)組,詳見實例)和torch.tensor之間的一種混合。但是,當(dāng)傳入數(shù)據(jù)時,torch.Tensor使用全局默認(rèn)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使用全局默認(rèn)dtype(FloatTensor)
print(y)     #tensor([1., 2.]),因為torch.Tensor使用全局默認(rèn)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       #隨機運行兩次,結(jié)果不同:tensor([[0., 0.]]),tensor([[1.4013e-45, 0.0000e+00]])
print(z)     #隨機運行兩次,結(jié)果不同: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()默認(rèn)為torch.FloatTensor而不是torch.LongTensor
print(z.type())   #torch.FloatTensor,注意:empty()默認(rèn)為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       #隨機運行兩次,結(jié)果不同:tensor([2.8026e-45]),tensor([0.])
print(t2)     #隨機運行兩次,結(jié)果不同: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       #隨機運行兩次,結(jié)果不同:tensor([0.]),tensor([1.4013e-45])
print(t3)     #隨機運行兩次,結(jié)果不同: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()來查看數(shù)據(jù)類型。是因為x.type()的輸出結(jié)果為'torch.LongTensor'或'torch.FloatTensor',可以看出兩個數(shù)組的種類區(qū)別。而采用type(x),則清一色的輸出結(jié)果都是torch.Tensor,無法體現(xiàn)類型區(qū)別。

PyTorch是個神奇的工具,其中的Tensor用法要遠(yuǎn)比numpy豐富。大家可以在練習(xí)中多多總結(jié),逐漸提高~

以上就是關(guān)于PyTorch中torch.tensor和torch.Tensor有什么區(qū)別的內(nèi)容,如果你們有學(xué)習(xí)到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI