Pytorch基礎函數(二)變形函數——view()與view_as()

view()函數是用於對Tensor(張量)進行形狀變化的函數,如一個Tensor的size是3x2,可以通過view()函數將其形狀轉爲2x3。

 

但是需要注意的是進行操作的張量必須是contiguous()的,即在在內存中連續的。(不連續可以使用tensor.contiguous()操作轉爲連續)。

 

一、view()函數基本操作

函數定義:view(*args)   [Ps: 參數的乘積積必須與原Tensor的元素個數保持一致,也就是轉換前後元素數量不變]

將進行view()操作的Tensor其形狀根據參數args進行改變。

例如:

t1=torch.Tensor([[1,2,3],[4,5,6]]).long()
print(t1)
print("-------view()-------")
t2=t1.view(3,2)
print(t2)

輸出:

二、view()函數:-1參數的應用

可以對view()中的一個參數設置爲-1。 若是對目標張量的某一維度不明、待定、視情況而變、懶得計算等等,可以使用-1參數進行操作。函數會自動計算-1參數對應維度的值。

例如:

data=[[[1,2],[3,4],[5,6]],[[7,8],[9,0],[10,11]]]
t1=torch.Tensor(data).long()#size=2,3,2
print(t1)
print(t1.size())
print("-------view()-------")
t2=t1.view(3,2,-1)
print(t2)
print(t2.size())

結果:

可以看到,對於設置參數爲-1的最後一維,自動計算爲了2。

三、view_as()函數

函數定義:view_as(tensor) [參數爲一個Tensor張量]

該函數的作用是將調用函數的變量,轉變爲同參數tensor同樣的形狀。

例如:

data1 = [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 0], [10, 11]]]
t1 = torch.Tensor(data1).long()  # size=2,3,2
data2 = [[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 0], [10, 11]]]
t2 = torch.Tensor(data2).long()
print(t1.size())
print(t2.size())
print("-------view_as()-------")
t2=t2.view_as(t1)
print(t2)
print(t2.size())

輸出結果:

可以看出經過view_as()操作後,t2 Tensor轉變爲了與t1 相同的形狀。(需要重新對t2賦值,這是因爲不是進行的原地操作)

-------end------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章