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------