天天看點

PyTorch中的Tensor

生成一個Tensor(t)

可以與list或numpy中的array互相轉化:

t=T.Tensor(list)
t=T.Tensor(np.array)
t=T.from_numpy(np.array)
list=T.tolist(t)
array=t.numpy()
           

Tensor和np.array共享記憶體,是以他們之間的轉換很快,而且幾乎不會消耗什麼資源。但這也意味着,如果其中一個變了,另外一個也會随之改變。 是以有些PyTorch沒有但numpy有的操作可以以很小的代價進行“曲線救國“

指定次元的Tensor:

t=T.Tensor(d1,d2,...)
t=T.ones(d1,d2,...)
t=T.zeros(d1,d2,...)
t=T.eye(d1,d2)
           

由于Tensor的size是一個專門的類型,是以上面的次元也可以由size類型指定。(eye()的參數僅包括1-2個int)

t=T.Tensor(t.size())
t=T.ones(t.size())   //t=T.ones_like(t)
t=T.zeros(t.size())  //t=T.zeros_like(t)
           

均分區間生成Tensor、

t=T.arange(m,n,step_length) //[m,n)中m開始以步長step_length生成
t=T.range(m,n,step_length)  //[m,n-1]中m開始以步長step_length生成
t=T.linspace(m,n,step_num)  //[m,n]中以m為首項,n為末項,均分區間為step_num段
           

随機化生成

t=T.rand(t.size())    //均勻分布
t=T.randn(t.size())   //标準正态分布
t=T.normal(mean,std)  //size同t.Tensor(),每個數以對應的均值mean和标準差std[i,j,...]正态采樣。
           

建立空Tensor和全值Tensor

t=T.empty(t.size())
t=T.empty_like(t)
t=T.full(t.size(),value)
t=T.full_like(t,value)
           

指定不同類型資料的Tensor

Data type CPU tensor GPU tensor
32-bit floating point T.FloatTensor T.cuda.FloatTensor
64-bit floating point T.DoubleTensor T.cuda.DoubleTensor
16-bit floating point T.HalfTensor T.cuda.HalfTensor
8-bit integer (unsigned) T.ByteTensor T.cuda.ByteTensor
8-bit integer (signed) T.CharTensor T.cuda.CharTensor
16-bit integer (signed) T.ShortTensor T.cuda.ShortTensor
32-bit integer (signed) T.IntTensor T.cuda.IntTensor
64-bit integer (signed) T.LongTensor T.cuda.LongTensor

觀察一個Tensor(t)

t.size()            //傳回size類型
T.numel(t)          //傳回總元素個數
t.view(d1,d2,d3....)//次元重整
t.unsqueeze(di)     //在di個次元處升維、
t.squeeze(di)       //若di維是,壓縮,否則不變。若無參數,壓縮所有“”維
T.cat((t,t,...),di) //按第di的次元按照tuple的格式複制t
T.chunk(t,i,di)     //在di維上将t分成i份,最後一份的次元不定(若不能整除)
           

采資料

T.index_select(t, di, indices)  //在第di維上将t的indices抽取出來組成新Tensor。
T.masked_select(t, mask)        //按照0-1Tensor mask的格式篩選t,傳回一維Tensor
T.nonzero(t)                    //輸出n×2維Tensor,非零元素的index
           

指定不同類型資料的Tensor

t.size()            //傳回size類型
T.numel(t)          //傳回總元素個數
t.view(d1,d2,d3....)//次元重整
t.unsqueeze(di)     //在di個次元處升維、
t.squeeze(di)       //若di維是,壓縮,否則不變。若無參數,壓縮所有“”維
T.cat((t,t,...),di) //按第di的次元按照tuple的格式複制t
T.chunk(t,i,di)     //在di維上将t分成i份,最後一份的次元不定(若不能整除)
           

一些數學功能類似于numpy,這裡就不再贅述了,邊用邊整理吧。

繼續閱讀