tensor.view(*shape) 函式

三世發表於2021-01-03

最近使用PyTorch編寫程式,經常會遇到tensor_data.contiguous().view(-1),以此記錄下其用法。


view()函式用法示例及其引數詳解

首先,view( ) 是對 PyTorch 中的 Tensor 操作的,若非 Tensor 型別,可使用 data = torch.tensor(data)來進行轉換。

(1) 作用:該函式返回一個有__相同資料__但不同大小的 Tensor。通俗一點,就是__改變矩陣維度__,相當於 Numpy 中的 resize() 或者 Tensorflow 中的 reshape() 。

(2) 引數:view( *shape )

x = torch.randn(4, 4)
print(x.size())
y = x.view(16)
print(y.size())
z = x.view(-1, 8)  # -1表示該維度取決於其它維度大小,即(4*4)/ 8
print(z.size())
m = x.view(2, 2, 4) # 也可以變為更多維度
print(m.size())

其輸出結果依次為:

torch.Size([4, 4])
torch.Size([16])
torch.Size([2, 8])
torch.Size([2, 2, 4])

(3) view( -1 )

若我們需要轉換維度為一維,有一種簡單的方式,即引數為 -1 。我們具體舉個例子:

a = torch.Tensor([[1, 2, 3], [4, 5, 6]]) # 定義一個 2*3 的 Tensor
a = a.view(-1)
print(a)

結果如下:

tensor([1., 2., 3., 4., 5., 6.])

從結果可以看出,其一行一行拼接在一起。

data.contiguous().view(-1)

在實際操作中,我們常會看到這個用法,contiguous()就是為了保證一個Tensor是連續的,這樣才能被 view() 處理。

 

view_as(other) → Tensor

返回被視作與給定的tensor相同大小的原tensor。 等效於:self.view(tensor.size())

a = t.arange(0, 6)
   ...: a.view(2, 3)
Out[32]: 
tensor([[0, 1, 2],
        [3, 4, 5]])

b.view_as(a)
Out[35]: tensor([1., 2., 3., 4., 5., 6.])
a
Out[36]: tensor([0, 1, 2, 3, 4, 5])

詳細解釋可以閱讀知乎這篇: https://zhuanlan.zhihu.com/p/64551412

相關文章